2017-08-03 2 views
0

Ich aktualisiere eine Elasticsearch-Instanz von 1.7 auf 5.4.3 und stelle fest, dass die Suchergebnisse zwischen den beiden Systemen unterschiedlich sind, selbst wenn dieselbe Abfrage verwendet wird.Die Ergebnisse der Elasticsearch-Abfrage weichen von 1,7 auf 5,4 ab

Elasticsearch 1.7 Abfrage

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "multi_match": { 
      "query": "something", 
      "fields": [ 
      "field1", 
      "field2", 
      "field3" 
      ], 
      "operator": "and" 
     } 
     } 
    } 
    } 
} 

Elasticsearch 5.4 Abfrage

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "multi_match": { 
      "query": "something", 
      "fields": [ 
       "field1", 
       "field2", 
       "field3" 
      ], 
      "operator": "and" 
      } 
     } 
     ] 
    } 
    } 
} 

Das erste Suchergebnis in Elasticsearch 1.7 wird das Ergebnis in der 71. Elasticsearch 5.4. Wenn ich das gleiche Suchergebnis zwischen 1.7 und 5.4 mit dem _explain Endpunkt ansehe, sehe ich, dass das Scoring anders gemacht wird. Diese Abfrage enthält auch Synonyme, mit denen die Suchanfrage übereinstimmt.

Erklären für Elasticsearch 1,7

{ 
    "_index": "...", 
    "_type": "...", 
    "_id": "...", 
    "matched": true, 
    "explanation": { 
     "value": 9.963562, 
     "description": "max of:", 
     "details": [ 
      { 
       "value": 3.1413355, 
       "description": "sum of:", 
       "details": [ 
        { 
         "value": 1.0609967, 
         "description": "weight(field1:something in 13) [PerFieldSimilarity], result of:", 
         "details": [ 
...remainder removed for brevity 

für Erklären Elasticsearch 5,4

{ 
    "_index": "...", 
    "_type": "...", 
    "_id": "...", 
    "matched": true, 
    "explanation": { 
     "value": 7.1987557, 
     "description": "sum of:", 
     "details": [ 
      { 
       "value": 7.1987557, 
       "description": "max of:", 
       "details": [ 
        { 
         "value": 6.659632, 
         "description": "weight(Synonym(field1:something field1:something2 field1:something3) in 113) [PerFieldSimilarity], result of:", 
         "details": [ 
...remainder removed for brevity 

Fragen

  1. Jede ob Aus welchem ​​Grund würden meine Suchergebnisse in beiden Versionen für die entsprechende Abfrage so unterschiedlich sein?
  2. Bedeutet die Tatsache, dass die _explain Abfrage für Elasticsearch 1.7 zeigt max of höher als sum of für die Berechnungen, und es ist die gegenüber für Elasticsearch 5.4 zeigt einen Teil des Problems?

Antwort

0

Der Standard "Ähnlichkeit" geändert in Elasticsearch 5.0, von TF/IDF zu BM25

Technisch ist dies eine Änderung tatsächlich, wenn sie Lucene 6.2 (default von Elasticsearch 5.0.0) bewegt.

The Elasticsearch 5.0.0 Release Notes die folgende Zeile:

Change default Ähnlichkeit mit BM25 #18948 (Ausgabe: #18944)

Sie mehr über Elasticsearch similarity here lesen kann. So werden zwei Felder miteinander verglichen (insbesondere solche mit dem "text" -Mapping). In Vor-5.0.0 war die Standardähnlichkeit TF/IDF (Begriff Häufigkeit, inverse Dokument Häufigkeit), das später zu BM25 (Best Match 25) geändert wurde. Diese Änderung führt zu einer anderen Reihe von Ergebnissen, die eine bessere Auswahl an Suchergebnissen ermöglichen sollen.

Wenn Sie das bisherige Verhalten verwenden möchten Sie die similarity in der Zuordnungsdatei verändern kann classic zu verwenden (die TF/IDF bezeichnet).Zum Beispiel könnte Ihre YAML-Mapping-Datei:

description: 
    type: text 
    similarity: classic 

Nützliche Links mit weiteren Informationen:

Verwandte Themen