2016-10-05 2 views
0

Ich benutze eine Dokumentabfrage gegen einen Percolator, der ok funktioniert. Wenn ich versuche, die Percolator-Abfragen nach dem Dokument zu filtern, das per Such-IDs perkoliert, gibt es kein Ergebnis zurück. Zum Beispiel:elasticsearch percolator filter schlägt fehl

{ 
    "doc" : { 
    "text" : "This is the text within my document" 
    }, 
    "highlight" : { 
    "order" : "score", 
    "pre_tags" : ["<example>"], 
    "post_tags" : ["</example>"], 
    "fields" : { 
    "text" : { "number_of_fragments" : 0 } 
    } 
}, 
"filter":{"ids":{"values":[11,15]}} 
, 
"size" : 100 
} 

Ich weiß sicher, dass dieser IDs korrekt ist, aber durchweg "matches" : [ ] erhalten. Wenn ich keinen Filter verwende, ruft ES korrekte Übereinstimmungen auf. Danke für Ihre Hilfe.

Antwort

0

Ich denke, ich habe es gelöst. Es scheint, dass the filter only works on the "metadata" fields, was bedeutet, dass Sie benutzerdefinierte Felder zu den Abfragen hinzufügen müssen, die im Percolator indiziert sind, um sie zu verwenden, um zu filtern, wenn Sie brauchen. mein vorheriges Beispiel verwenden, würde ich zum Index in percolator Anfragen wie habe:

{ 
    "query" : { 
     "match_phrase" : { 
     "text" : "document" 
     } 
    }, 
    "id" : 11 
    } 

„von Hand“, um ein redundantes id Feld Hinzufügen es als Filterreferenz später zu verwenden. Bei Sickerzeit, müssen Sie so etwas wie verwenden:

{ 
    "doc" : { 
    "text" : "This is the text within my document" 
    }, 
"filter":{"match":{"id":11}}, 
    "highlight" : { 
    "order" : "score", 
    "pre_tags" : ["<example>"], 
    "post_tags" : ["</example>"], 
    "fields" : { 
    "text" : { "number_of_fragments" : 0 } 
    } 
}, 
"size" : 100 
} 

Um nur diese percolator Abfrage zu verwenden. Ergänzende Informationen finden Sie unter here.

Verwandte Themen