Frage Es wurde kein Mapping für das Feld gefunden, um nach ElasticSearch zu sortieren


Elasticsearch wirft ein SearchParseException Beim Analysieren der Abfrage, wenn Dokumente gefunden wurden, die kein in Sortierkriterien verwendetes Feld enthalten.

SearchParseException: Parse Failure [Keine Zuordnung für [Preis] gefunden, um zu sortieren]

Wie kann ich diese Dokumente erfolgreich durchsuchen, auch wenn einige fehlen? price Feld?


76
2018-06-11 18:58


Ursprung


Antworten:


Nach dem Graben mehr, fand ich die Lösung wie unten angegeben. ignore_unmapped sollte explizit auf festgelegt werden true in der Sortierklausel.

"sort" : [
       { "rating": {"order" : "desc" , "ignore_unmapped" : true} },
       { "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]

Weitere Informationen finden Sie in den Elasticsearch Referenzen für:


91
2018-06-11 19:13



Für diejenigen, die nach einem Beispiel für beides suchen ignore_unmapped und    unmapped_type bitte sehen meine Antwort hier.

Beachten Sie, dass "ignore_unmapped" jetzt zugunsten von "unmapped_type" veraltet ist. Dies wurde als Teil von gemacht # 7039

Aus der Dokumentation: Vor 1.4.0 gab es den booleschen Parameter ignore_unmapped, der nicht genügend Informationen enthielt, um über die zu sendenden Sortierwerte zu entscheiden, und nicht für die indexübergreifende Suche. Es wird weiterhin unterstützt, aber Benutzer werden dazu ermutigt, stattdessen zu dem neuen unmapped_type zu migrieren.

Standardmäßig schlägt die Suchanforderung fehl, wenn keinem Feld eine Zuordnung zugeordnet ist. Mit der Option unmapped_type können Felder ignoriert werden, die keine Zuordnung haben und nicht nach ihnen sortieren. Der Wert dieses Parameters wird verwendet, um zu bestimmen, welche Sortierwerte ausgegeben werden sollen. Hier ist ein Beispiel, wie es verwendet werden kann:

{
    "sort" : [
        { "price" : {"unmapped_type" : "long"} },
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

Wenn einer der abgefragten Indizes kein Mapping für den Preis hat, wird Elasticsearch damit so verfahren, als ob es eine Zuordnung vom Typ long gegeben hätte, wobei alle Dokumente in diesem Index keinen Wert für dieses Feld hätten.


30
2018-06-15 21:16



Anscheinend wird ElasticSearch nicht nach Nullwerten sortieren. Ich ging davon aus, dass es null als Anfang oder Ende behandeln würde (wie bei der SQL-Sortierung), aber ich glaube, es löst auch diesen Fehler aus.

Wenn Sie diesen Fehler sehen, 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 an ES als null gesendet wurde.

Dieses Problem zeigt an, dass Nullwerte gehandhabt werden, aber es war nicht meine Erfahrung. Es ist etwas wert, es trotzdem zu versuchen.


2
2018-03-29 08:17



Ich hatte das gleiche Problem (sorta; würde einige Fehler bekommen, aber einige Ergebnisse), aber in meinem Fall wurde meine Suche an der Wurzel (kein Index angegeben) ausgegeben, und die Fehler, die ich bekam, waren, weil die Suche / Reihenfolge auch war auf einen Kibana Index schauen.

Dummer Fehler, aber vielleicht hilft das einem anderen, der hier landet.


0
2018-01-03 17:40