Elasticsearch löst eine SearchParseException
Analyse-Abfrage aus, wenn einige Dokumente gefunden wurden, die kein Feld enthalten, das in Sortierkriterien verwendet wird.
SearchParseException: Analysefehler [Keine Zuordnung für [Preis] gefunden, um zu sortieren]
Wie kann ich diese Dokumente erfolgreich durchsuchen, auch wenn bei einigen das price
Feld fehlt ?
Antworten:
Nachdem ich mehr gegraben hatte, fand ich die Lösung wie unten angegeben.
ignore_unmapped
solltetrue
in der Sortierklausel explizit auf gesetzt werden .Weitere Informationen finden Sie in den Elasticsearch-Referenzen für:
quelle
"ignore_unmapped" : true
und es fing wieder an zu funktionieren, aber seltsam ist, was hinter den Kulissen passiert ist! Wer weiß! Wie auch immer, es funktioniert jetzt. +1Beachten Sie, dass "ignore_unmapped" jetzt zugunsten von "unmapped_type" veraltet ist. Dies wurde als Teil von # 7039 durchgeführt
Aus der Dokumentation: Vor 1.4.0 gab es den booleschen Parameter ignore_unmapped, der nicht ausreichte, um über die auszustellenden Sortierwerte zu entscheiden, und der für die indexübergreifende Suche nicht funktionierte. Es wird weiterhin unterstützt, aber Benutzer werden aufgefordert, stattdessen auf den neuen unmapped_type zu migrieren.
Standardmäßig schlägt die Suchanforderung fehl, wenn einem Feld keine Zuordnung zugeordnet ist. Mit der Option unmapped_type können Felder ohne Zuordnung ignoriert und nicht nach diesen sortiert werden. Der Wert dieses Parameters wird verwendet, um zu bestimmen, welche Sortierwerte ausgegeben werden sollen. Hier ist ein Beispiel, wie es verwendet werden kann:
Wenn einer der abgefragten Indizes keine Preiszuordnung hat, behandelt Elasticsearch diese so, als ob eine Zuordnung vom Typ long vorhanden wäre, wobei alle Dokumente in diesem Index keinen Wert für dieses Feld haben.
quelle
Anscheinend sortiert ElasticSearch nicht nach Nullwerten. Ich ging davon aus, dass null am Anfang oder Ende behandelt werden würde (wie bei der SQL-Reihenfolge), aber ich glaube, dass es auch diesen Fehler auslöst.
Wenn dieser Fehler angezeigt wird, müssen Sie möglicherweise sicherstellen, dass das Sortierattribut einen Standardwert hat, wenn es an ElasticSearch gesendet wird.
Ich hatte diesen Fehler mit Rails + ElasticSearch + Tire, weil die Sortierspalte keinen Standardwert hatte und daher als null an ES gesendet wurde.
Dieses Problem weist darauf hin, dass Nullwerte verarbeitet werden, aber es war nicht meine Erfahrung. Es lohnt sich trotzdem, es zu versuchen.
quelle
Ich hatte das gleiche Problem (sorta; würde einige Fehler, aber einige Ergebnisse erhalten), aber in meinem Fall wurde meine Suche im Stammverzeichnis ausgegeben (kein Index angegeben), und die Fehler, die ich erhielt, waren, weil die Suche / Reihenfolge auch war auf einen Kibana-Index schauen.
Dummer Fehler, aber vielleicht hilft das jemand anderem, der hier landet.
quelle
Elasticsearch 6.4
Geben Sie einfach den Index an und fertig in Kibana
VOR
NACH DEM
quelle
wenn Sie es verwenden 6.7
Probier diese
quelle
Sie können auch ein Skript verwenden, das Ihnen Flexibilität bietet:
quelle
Wenn wir den folgenden Code verwenden, bei dem add_on das Datum ist, was passiert dann !! Attributtext wird analysiert, dh er wird beim Speichern in verschiedene Wörter aufgeteilt und ermöglicht die Freitextsuche nach einem oder mehreren Wörtern im Feld
Daher sind den Feldern "Text" und "Schlüsselwort" zugeordnet. Wenn wir also die Aggregation in der Abfrage verwenden müssen, benötigen wir den Feldwert im Allgemeinen das Schlüsselwort.
quelle