2014-02-13 3 views
5

Ich führe eine unscharfe Suche durch und muss sehen, welche Wörter gefunden wurden. Wenn ich beispielsweise nach der Abfrage testing suche und ein Feld mit dem Satz The boy was resting übereinstimmt, muss ich wissen können, dass die Übereinstimmung auf das Wort resting zurückzuführen ist.Ermitteln, welche Wörter in einer unscharfen Suche gefunden wurden

Ich habe versucht, den Parameter explain = true einzustellen, aber es scheint nicht die Informationen zu enthalten, die ich brauche. Irgendwelche Gedanken?

+0

Leider sehe ich nichts in der Fuzzy-Dokumentation..Ich würde vermuten, dass Explain Ihre beste Wette ist, aber es klingt, als ob es nicht Port. Ich bin auch interessiert. – Sam

+1

@SamSullivan Nach ein bisschen mehr Forschung fand ich die Antwort. Es ist eine Funktion namens Hervorhebung, die ich in einer Antwort unten gepostet habe. – Ari

+0

Ah, du wolltest es eigentlich zum Hervorheben? XY-Problem :) Lassen Sie meine Antwort für die Nachwelt da sein. –

Antwort

7

In Ordnung, das ist, was ich suchte:

Nach einem wenig Forschung, fand ich die Highlighting feature von Elasticsearch.

Standardmäßig wird ein Kontextausschnitt zurückgegeben, der die Übereinstimmung umgibt, Sie können jedoch die Fragmentgröße auf die Abfragelänge einstellen, um nur die exakte Übereinstimmung zurückzugeben. Zum Beispiel:

{ 
    query : query, 
    highlight : { 
     "fields" : { 
      'text' : { 
       "fragment_size" : query.length 
      } 
     } 
    } 
} 
0

Verwenden Sie explain sollte Ihnen einige Hinweise, obwohl nicht sehr leicht verfügbar.

Wenn Sie Folgendes ausführen, auch verfügbar unter https://www.found.no/play/gist/daa46f0e14273198691a, sollten Sie z. description: "weight(text:nesting^0.85714287 in 1) […], description: "weight(text:testing in 1) [PerFieldSimilarity] […] und so weiter in dem Hit _explanation.

#!/bin/bash 

export ELASTICSEARCH_ENDPOINT="http://localhost:9200" 

# Create indexes 

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{}' 

# Index documents 
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d ' 
{"index":{"_index":"play","_type":"type"}} 
{"text":"The boy was resting"} 
{"index":{"_index":"play","_type":"type"}} 
{"text":"The bird was testing while nesting"} 
' 

# Do searches 

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d ' 
{ 
    "query": { 
     "match": { 
      "text": { 
       "query": "testing", 
       "fuzziness": 1 
      } 
     } 
    }, 
    "explain": true 
} 
' 
Verwandte Themen