2013-06-11 9 views
69

Elasticsearch wyrzuca SearchParseException podczas analizowania zapytania, jeśli znaleziono jakieś dokumenty nie zawierające pola użytego w kryteriach sortowania.Brak mapowania dla pola w celu posortowania w ElasticSearch

SearchParseException: Przetwarza Wada [Nie znaleziono [Cena] mapowanie aby posortować]

Jak można skutecznie wyszukiwać tych dokumentów, nawet jeśli niektóre z nich są brakujące pola price?

+1

Twoje pytanie/odpowiedź rozwiązało mój problem - dziękuję. Zmontowałem go nieco, aby go uogólnić, nie wahaj się cofnąć, jeśli ci to nie pasuje. –

+0

Odniesienie do obsługi tego problemu [Link do Elasticsearch] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html) – Ajeesh

Odpowiedz

78

Po zakończeniu kopania znalazłem rozwiązanie przedstawione poniżej. ignore_unmapped należy jawnie ustawić na true w klauzuli sort.

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

Aby uzyskać więcej informacji zajrzyj na odnośnikach Elasticsearch dla:

+0

Witam, mam ten sam problem i ja don nie wiesz jak to działa ... Atrybuty brakujące i ignore_unmapped powinny działać razem, prawda? Jeśli na przykład ustawię brakujące "_last" i ignore_unmapped na "false", nadal mam problem, ale chcę, aby dokumenty we wszystkich przypadkach były w wynikach, nawet jeśli nie mają tego atrybutu. – c4k

+0

Mam ten problem i "ignore_unmapped" nie działa, jeśli typ jest pusty (tzn. Bez żadnego dokumentu zindeksowanego). – reinaldoluckman

+2

Wygląda na to, że nową strategią jest użycie [unmapped_type] (https://www.elastic.co/guide/en/elasticsearch/reference/1.x/search-request-sort.html#_ignoring_unmapped_fields) – lukmdo

0

ja doświadczył ten sam problem (sorta, by dostać jakieś błędy, ale niektóre wyniki), ale w moim przypadku moje poszukiwania były wydawane w katalogu głównym (bez określonego indeksu), a błędy, które otrzymywałem, były spowodowane tym, że morze rch/order również szukał indeksu Kibana.

Głupi błąd, ale może to pomoże komuś, kto tu trafi.

+0

Mam ten sam problem .. ale gdy określam ignorowanie unmapped i nie otrzymuję żadnego sortowania w ogóle podczas przeszukiwania root ... to ogranicza możliwość wyszukiwania mnie, jeśli muszę zdefiniować indeks ... wystarczy, aby wszystkie pasujące wyniki zostały posortowane według pola, jeśli istnieje, i wypełnij użyj wartości domyślnej dla tych, które nie .. EDYCJA: – mgoetzke

2

Podobno ElasticSearch nie sortuje wartości null. Zakładałem, że potraktuje on wartość null jako będącą na początku lub na końcu (tak jak przy porządkowaniu SQL), ale uważam, że powoduje to również ten błąd.

Jeśli widzisz ten błąd, być może musisz upewnić się, że atrybut sortowania ma wartość domyślną, gdy jest wysyłany do ElasticSearch.

Miałem ten błąd z Railsami + ElasticSearch + Tire, ponieważ kolumna sortowania nie miała wartości domyślnej, więc została wysłana do ES jako null.

This issue wskazuje wartości null są obsługi, ale to nie było moje doświadczenie. W każdym razie warto czegoś takiego spróbować.

28

Dla tych, którzy szukają przykład zarówno ignore_unmapped i unmapped_type proszę zobaczyć my response here.

Należy zauważyć, że "ignore_unmapped" jest teraz przestarzałe na rzecz "unmapped_type". Dokonano tego w ramach #7039

From documentation: Przed 1.4.0 nie był ignore_unmapped logiczna parametr, który nie był wystarczająco dużo informacji, aby zdecydować się na wartościach sortowania emitować, a nie działać na poszukiwaniu cross-index. Jest nadal obsługiwany, ale użytkownicy są zachęcani do migracji do nowego typu unmapped_type.

Domyślnie żądanie wyszukiwania nie powiedzie się, jeśli nie ma mapowania skojarzonego z polem. Opcja unmapped_type pozwala ignorować pola, które nie mają odwzorowania i nie sortują według nich. Wartość tego parametru służy do określania wartości sortowania do emisji.Oto przykład, jak może on być stosowany:

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

Jeżeli którykolwiek z indeksów, które są testowane nie posiada odwzorowanie dla cenie następnie Elasticsearch zajmie to tak, jakby nie było odwzorowanie typu długości, wszystkie dokumenty w tym indeksie nie mają wartości dla tego pola.

Powiązane problemy