Wie kann man in elasticsearch genaue Werte erzeugen und Abfragen auf dasselbe Feld abgleichen?

8

Also habe ich ein Feld, das einen Wert im Format: number/year , etwa 23/2014, 24/2014, 12/2015 usw. speichert.

Wenn also dieses Feld als not_analyzed eins zugeordnet ist, kann ich mit dem Termfilter genau nach Werten suchen, wenn ich in dieser exakten Struktur nach einem Wert suche (etwa 1/2014, 15/2014, ...). ) Es funktioniert, wie die sql equals(=) .

%Vor%

Also würde die Suche mit etwas anderem wie 11 / oder / 2014 keine Treffer liefern. Das ist in Ordnung.

Aber wenn ich das Feld als not_analyzed definiere, kann ich keine sql LIKE Typ Suchen mit der match_phrase Abfrage durchführen.

%Vor%

In diesem Fall sollte die Suche nach 11,11 /, / 2014 oder 2014 Treffer liefern, aber nicht. Die Sache ist, diese Abfrage funktioniert, wenn das Feld nicht als not_analyzed eins zugeordnet ist. So scheint es, dass ich entweder das eine oder das andere verwenden muss, das Problem ist, dass das Feld beide Optionen für verschiedene Abfragen unterstützen soll, fehle ich hier etwas?

    
Maxrunner 13.11.2014, 16:36
quelle

1 Antwort

14

Sie können das gleiche Feld processNumber auf verschiedene Arten mit Felder Eigenschaft im Mapping:

Wenn Sie beispielsweise die analysierte und nicht analysierte Version von ProcessNumber haben möchten, wäre das Mapping:

%Vor%

Wo das nicht analysierte Feld in der Abfrage als processNumber bezeichnet wird.

Um auf die analysierte Ansicht des Felds zu verweisen, verwenden Sie processNumber.analyzed

Die Abfragen für die Begriffe 11/201, 11 usw. wären:

Beispielfilter:

%Vor%

Termfilter Es analysiert nicht den Suchstring, so dass eine Eingabe mit dem invertierten Index in diesem Fall übereinstimmt: 11/2014 gegen das Feld.

Beispiel Match_Phrase_prefix:

%Vor%

match_phrase_prefix versucht zu prüfen, ob Der letzte Ausdruck in der Phrase ist ein Präfix von Termen im Index. Es analysiert den Suchstring, wenn ein Analysator angegeben ist. Dies ist der Grund, warum Sie hier die unanalyzed Version des Feldes verwenden müssen. Wenn wir processNumber.analyzed Suchabfragen wie 11-201, 11 | 201 verwenden, entspricht dies auch

Beispiel Übereinstimmung:

%Vor%

Das ist einfach Übereinstimmung , da der Standardanalysator (normalerweise der Standardanalysator) 11/2014 mit den Termen 11, 2014 symbolisiert.

Sie können die Analyse-API verwenden, um zu sehen, wie ein bestimmter Text vom Standardanalysator analysiert wird.

%Vor%     
keety 13.11.2014, 18:12
quelle

Tags und Links