2016-05-04 10 views
0

Ich habe einen großen Feed von Nachrichtenartikeln, die ich indexiere. Ich möchte es vermeiden, viele Artikel, die fast gleich sind, zu indizieren (zum Beispiel können Artikel eines Nachrichtendienstes oft mit leicht unterschiedlichen Datumsformaten erscheinen).Warum haben alle meine ElasticSearch mehr Ähnlichkeit? Diese Treffer haben null Punkte?

Also dachte ich, ich würde eine mehr-wie-diese-Abfrage mit jedem Artikel machen. Wenn ich einen Treffer mit einem Score> Cutoff zurückbekomme, dann ist der Artikel bereits indiziert und ich kümmere mich nicht darum.

Aber wenn ich meine mehr wie diese Abfrage ausführen, kommen alle Treffer, die ich bekomme, mit einer Punktzahl von Null zurück. Ich kann nicht sagen, ob das erwartet wird, ob ich etwas falsch mache oder ob ich einen Fehler entdeckt habe.

Meine Anfrage wie folgt aussieht:

POST _search 
{"query": 
    {"bool": 
    {"filter": [ 
     {"more_like_this": 
     {"fields": ["text"], 
     "like": "Doctor Sentenced In $3.1M Health Care Fraud Scheme Justice Department Documents & Publications \nGreenbelt, Maryland - U.S. District Judge Deborah K. Chasanow sentenced physician [snip]" 
     } 
     } 
    ] 
    } 
} 

Und die Ergebnisse, die ich zurück sind erhalten:

{ 
    "took": 8, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 390, 
    "max_score": 0, 
    "hits": [ 
     [snip] 

Antwort

0

ich heute ähnlichen Problem konfrontiert war, more_like_this Abfrage wurde nicht Folge mir zurück. wie ich nicht-Standard-Routing verwendet und nicht _routing übergeben.

Meine Abfrage sieht aus wie unten, i in article in default_11 Index in Dokumentfelder keywords und contents suchen hatte.

GET localhost:9200/alias_default/articles/_search 
{ 
       "more_like_this": { 
        "fields": [ 
         "keywords", 
         "contents" 
        ], 
        "like": { 
         "_index": "default_11", 
         "_type": "articles", 
         "_routing": "6", 
         "_id": "1000000000006000000000000000014" 
        }, 
        "min_word_length": 2, 
        "min_term_freq": 2 
       } 
    } 

Beachten Sie auch Passing _routing Parameter.

This issue typically occurs when documents are indexed with non-default routing

See: ElasticSearch returns document in search but not in GET

0

Der Grund ist, weil Sie Ihre MLT Abfrage innerhalb einer Filterabfrage haben. Filterabfragen geben immer eine Punktzahl von Null zurück. Setzen Sie Ihre MLT in eine Muss- oder Soll-Abfrage und Sie erhalten Punkte zurück.

0

Sie erhalten null Punkte, da der Filterteil des Bool-Operators nicht in die Berechnung der Punktzahl einbezogen wird. Es wird nur zum Filtern von Ergebnissen verwendet. Sie sollten den MUST-Operator verwenden, um eine Punktzahl zu erhalten.

POST _search 
{"query": 
    {"bool": 
    {"must": [ 
     {"more_like_this": 
     {"fields": ["text"], 
     "like": "Doctor Sentenced In $3.1M Health Care Fraud Scheme Justice Department Documents & Publications \nGreenbelt, Maryland - U.S. District Judge Deborah K. Chasanow sentenced physician [snip]" 
     } 
     } 
    ] 
    } 
} 

Weitere Informationen finden Sie in der doc https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html