2014-09-05 1 views
6

Neu bei Elasticsearch. Ich bin daran interessiert, nur die relevantesten Dokumente zurückzusenden und bin auf min_score gestoßen. Sie sagen "Anmerkung, das macht meistens keinen Sinn", liefert aber keinen Grund. Also, warum macht es keinen Sinn, min_score zu verwenden?Warum nicht min_score mit Elasticsearch verwenden?

EDIT: Was ich wirklich tun möchte, ist nur Dokumente zurückgeben, die eine höhere als "Score" haben. Ich habe dies:

data = { 
     'min_score': 0.9, 
     'query': { 
      'match': {'field': 'michael brown'}, 
     } 
    } 

Gibt es eine bessere Alternative zu den oben, so dass sie nur die relevantesten Dokumente zurückgibt?

thx!

EDIT # 2: Ich verwende minimum_should_match und es gibt ein 400-Fehler:

"error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;" 

data = { 
     'query': { 
      'match': {'keywords': 'michael brown'}, 
      'minimum_should_match': '90%', 
     } 
    } 
+0

Nicht sehr nützlich, es sei denn, Sie selbst berechnen Ergebnisse, und selbst dann müssten sie wahrscheinlich vollständig von Ihnen gesteuert werden. Ich habe noch nie min_score verwendet, obwohl ich Scoreboosts verwendet habe, weil ich mich nie darum gekümmert habe, dass der Mindestwert im Vergleich zum Minimum passt. Ich benutze nur Punktzahl für die Sortierung und Top-N-Suche – coffeeaddict

+0

Ich habe auch versucht mit minimum_should_match, aber es gibt einen "400" Status. Ich habe meine Frage aktualisiert. –

+0

Wie haben Sie minimum_should_match verwendet? Die Sache mit min_score ist was bedeutet 0.9? Wie haben Sie basierend auf der Bewertung definiert, was "gut genug" ist (es sei denn, Sie erstellen diese Bewertung mit Hilfe einer Boost/Funktion) – coffeeaddict

Antwort

4

ich min_score ziemlich viel für den Versuch, Dokumente zu finden, die ein endgültiges Spiel ist zu einer gegebenen Menge verwendet habe von Eingabedaten - mit denen die Abfrage generiert wird.

Die Punktzahl, die Sie für ein Dokument erhalten, hängt natürlich von der Abfrage ab. Ich würde also sagen, versuchen Sie Ihre Abfrage in vielen Permutationen (z. B. verschiedene Schlüsselwörter) und entscheiden Sie, welches Dokument das erste ist, das Sie lieber nicht für jedes zurückgeben würden, und notieren Sie sich jede ihrer Bewertungen. Wenn die Punktzahlen ähnlich sind, würde dies eine gute Schätzung für den Wert sein, den Sie für Ihre Mindestpunktzahl verwenden möchten.

Sie müssen jedoch berücksichtigen, dass die Punktzahl nicht nur von der Abfrage und dem zurückgegebenen Dokument abhängt, sondern alle anderen Dokumente berücksichtigt, die Daten für die Felder enthalten, die Sie abfragen. Dies bedeutet, dass sich beim Versuch, den Wert für min_score mit einem Index von 20 Dokumenten zu testen, dieses Ergebnis wahrscheinlich erheblich ändert, wenn Sie es in einem Produktionsindex mit z. B. einigen tausend Dokumenten oder mehr testen. Diese Veränderung könnte in beide Richtungen gehen und ist nicht leicht vorhersehbar.

Ich habe für meine passenden Verwendungen von min_score gefunden, müssen Sie eine ziemlich komplizierte Abfrage erstellen, und eine Reihe von Analysatoren, um die Bewertungen für verschiedene Komponenten Ihrer Abfrage abzustimmen. Aber was ist und was nicht, ist entscheidend für meine Anwendung, so dass Sie mit dem, was es Ihnen bietet, zufrieden sein können, wenn Sie die Dinge einfach halten.

2

Ich weiß nicht, ob es die beste Lösung, aber es funktioniert für mich (Java):

// "tiny" search to discover maxScore 
// it is fast, because it returns only 1 item 
SearchResponse response = client.prepareSearch(INDEX_NAME) 
         .setTypes(TYPE_NAME) 
         .setQuery(queryBuilder) 
         .setSize(1) 
         .execute() 
         .actionGet(); 

// get the maxScore and 
// and set minScore = 70% 
float maxScore = response.getHits().maxScore(); 
float minScore = maxScore * 0.7; 

// second round with minimum score 
SearchResponse response = client.prepareSearch(INDEX_NAME) 
         .setTypes(TYPE_NAME) 
         .setQuery(queryBuilder) 
         .setMinScore(minScore) 
         .execute() 
         .actionGet(); 

ich zweimal zu suchen, aber das erste Mal, es ist schnell, weil es nur 1 Punkt zurückkehrt, uns dann kann die max_score

erhalten HINWEIS: minimum_should_match arbeiten anders. Wenn Sie 4 Abfragen haben und Sie Minimum_should_match = 70% sagen, bedeutet dies nicht, dass item.score> 70% sein sollte. Es bedeutet, dass der Artikel 70% der Anfragen entsprechen sollte, das sind mindestens 3/4 Anfragen

Verwandte Themen