Wie, um genaue Werte und match-queries auf demselben Feld in elasticsearch?
Also ich habe ein Feld speichert einen Wert im format: number/year
so etwas wie 23/2014, 24/2014, 12/2015, etc...
also, wenn dieses Feld zugeordnet ist, als not_analyzed
man, ich kann den genauen Wert suchen mit Begriff filtern, wenn ich nach einem Wert suchen, in exakt der Struktur(sowas in der Art 1/2014, 15/2014,...) funktioniert es, wie die sql equals(=)
.
{
"query": {
"filtered": {
"filter": {
"term": {
"processNumber": "11/2014"
}
}
}
}
}
So, Suche mit etwas anderes wie 11/, oder /2014 zurückgeben würde nicht trifft. Das ist in Ordnung.
Aber wenn ich definieren Sie das Feld als not_analyzed
, kann ich nicht machen sql LIKE
Art sucht mit der match_phrase
Abfrage.
{
"query": {
"match_phrase": {
"processNumber": "11/201"
}
}
}
In diesem Fall die Suche für 11,11/,/2014 oder 2014 sollte die Rückkehr trifft, aber Sie nicht.
Die Sache ist, diese Abfrage funktioniert, wenn das Feld nicht zugeordnet, wie ein not_analyzed
ein. So es scheint, muss ich entweder die eine oder die andere, das problem ist, dass der Bereich sollte Unterstützung beide Optionen für die verschiedenen Abfragen, bin ich hier etwas fehlt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Analysieren Sie das gleiche Feld processNumber in unterschiedlicher Weise mit der Felder Eigenschaft in der Abbildung:
Zum Beispiel, wenn Sie wollen, die analysiert und nicht analysierter version von ProcessNumber die Zuordnung wäre :
Wo die nicht-analysiert-Feld bezeichnet wird, in der Abfrage als processNumber .
Verweisen auf die analysierten Sicht auf das Feld verwenden processNumber.analysiert
Abfragen nach Begriffen, 11/201, 11 etc wäre :
Filter Beispiel:
Begriff filter es nicht zu analysieren, den such-string, so dass eine Eingabe übereinstimmen würde, wie es mit den Feldern invertierten index, in diesem Fall : 11/2014 gegen das Feld.
Beispiel Match_Phrase_prefix:
match_phrase_prefix versucht, zu überprüfen, wenn der Letzte Ausdruck in dem Satz ist ein Präfix der Begriffe im index .
Es analysiert die such-Zeichenfolge, wenn ein Analysator angegeben wird. Dies ist der Grund, warum Sie brauchen, um die Nutzung nicht analysierter version von hier das Feld . Wenn wir processNumber.analysiert Suchanfragen wie 11-201 , 11/201 würde auch passen,
Beispiel match :
Dies ist gerade nach vorne match da default analyzer (in der Regel standard-analyzer) wird die tokenisierung 11/2014 Begriffe 11, 2014 .
Können Sie die Analyse-api, um zu sehen, wie ein bestimmter text wird analysiert, indem Standard-analyzer.