2014-03-05 12 views
12

ich ein Bündel von Dokumenten mit einem Array-Feld wie dieses:Elasticsearch Begriffe Filter liefert keine Ergebnisse

{ "feed_uids": ["math.CO", "cs.IT"] } 

Ich mag würde alle Dokumente finden, die auch nur einen Teil dieser Werte enthalten das heißt, sie als Tags behandeln. Die Dokumentation führt zu der Annahme, dass ein Begriffsfilter funktionieren sollte:

{ "query": { "filtered": { "filter": { "terms": { "feed_uids": [ "cs.IT" ] } } } } } 

Die Abfrage stimmt jedoch mit nichts überein. Was mache ich falsch?

+0

Wenn Sie machen einen Terms-Filter. Die Spalte, die Sie filtern möchten, sollte analysiert werden. Ist das Feld feeds_uids für die Analyse festgelegt? Wenn ja, welcher Analysator benutzt es? Können Sie testen, welche Token zurückgegeben werden, wenn Sie die Zeichenfolge cs.IT an den Analysator übergeben. Sie können die Rückgabedaten des Analysators folgendermaßen testen: localhost: 9200/{Ihr Indexname}/_ analyze? Analyzer = {Name Ihres Analysators} & text = cs.IT. –

+0

Ich habe gerade Ihren Text durch den Standard-Schneeball-Analysator ausgeführt und folgende Token-Antwort erhalten, {"Token": [{"token": "cs.it", "start_offset": 0, "end_offset": 5, "type ":" "," position ": 1}]}, so scheint die Tokenisierung Ihres Textes korrekt zu sein, also kann ich mir nur vorstellen, dass das Feld feed_uids nicht auf Analyse eingestellt ist. –

Antwort

16

Das terms -Filter funktioniert so, wie Sie es erwarten. Ich vermute, Ihr Problem besteht darin, dass Sie ein Mapping haben, bei dem feed_uids den Standardanalysator verwendet.

Dies ist ein recht häufiges Problem, das in ein bisschen mehr Tiefe hier beschrieben wird: Troubleshooting Elasticsearch searches, for Beginners

Hier ist ein lauffähiges Beispiel präsentiert, wie es funktioniert, wenn Sie "index": "not_analyzed" für das Feld an: https://www.found.no/play/gist/bc957d515597ec8262ab

#!/bin/bash 

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

# Create indexes 

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{ 
    "mappings": { 
     "type": { 
      "properties": { 
       "feed_uids": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
    } 
}' 

# Index documents 
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d ' 
{"index":{"_index":"play","_type":"type"}} 
{"feed_uids":["math.CO","cs.IT"]} 
{"index":{"_index":"play","_type":"type"}} 
{"feed_uids":["cs.IT"]} 
' 

# Do searches 

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d ' 
{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "terms": { 
        "feed_uids": [ 
         "cs.IT" 
        ] 
       } 
      } 
     } 
    } 
} 
' 
Verwandte Themen