Elasticsearch zgłasza SearchParseException
zapytanie while parsowania, jeśli znaleziono jakieś dokumenty nie zawierające pola używanego w kryteriach sortowania.
SearchParseException: Parse Failure [Nie znaleziono mapowania dla [cena] w celu sortowania według]
Jak mogę pomyślnie przeszukiwać te dokumenty, nawet jeśli w niektórych brakuje price
pola?
Odpowiedzi:
Po dalszych kopaniu znalazłem rozwiązanie podane poniżej.
ignore_unmapped
powinna być jawnie ustawionatrue
w klauzuli sortowania.Aby uzyskać więcej informacji, zapoznaj się z referencjami Elasticsearch dla:
źródło
"ignore_unmapped" : true
i znowu zaczęło działać, ale dziwne jest to, co wydarzyło się za sceną! Kto wie! Tak czy inaczej, teraz działa. +1Zauważ, że „ignore_unmapped” jest teraz przestarzałe i zastępuje „unmapped_type”. Zrobiono to w ramach # 7039
Z dokumentacji: Przed wersją 1.4.0 był parametr logiczny ignore_unmapped, który nie zawierał wystarczających informacji, aby zdecydować o emisji wartości sortowania i nie działał w przypadku wyszukiwania między indeksami. Jest nadal obsługiwany, ale zachęca się użytkowników do migracji do nowego unmapped_type.
Domyślnie żądanie wyszukiwania zakończy się niepowodzeniem, jeśli z polem nie jest skojarzone żadne mapowanie. Opcja unmapped_type pozwala zignorować pola, które nie mają mapowania i nie sortować według nich. Wartość tego parametru służy do określenia, jakie wartości sortowania mają być emitowane. Oto przykład, jak można go użyć:
Jeśli którykolwiek z odpytywanych indeksów nie ma mapowania ceny, Elasticsearch obsłuży to tak, jakby istniało odwzorowanie typu long, przy czym wszystkie dokumenty w tym indeksie nie mają wartości dla tego pola.
źródło
Najwyraźniej ElasticSearch nie sortuje według wartości null. Zakładałem, że potraktuje wartość null jako początkową lub końcową (jak w przypadku porządkowania SQL), ale uważam, że również wyzwala ten błąd.
Jeśli więc zobaczysz ten błąd, może być konieczne upewnienie się, że atrybut sortowania ma wartość domyślną, gdy jest wysyłany do ElasticSearch.
Wystąpił ten błąd z Rails + ElasticSearch + Tire, ponieważ kolumna sortowania nie miała wartości domyślnej, więc została wysłana do ES jako null.
Ten problem wskazuje, że obsługiwane są wartości null, ale nie było to moje doświadczenie. I tak warto spróbować.
źródło
Wystąpił ten sam problem (sorta; otrzymywałem pewne błędy, ale niektóre wyniki), ale w moim przypadku moje wyszukiwanie było wykonywane w katalogu głównym (nie określono indeksu), a błędy, które otrzymywałem, były spowodowane tym, że wyszukiwanie / kolejność również patrząc na indeks Kibana.
Głupi błąd, ale może pomoże to komuś innemu, kto tu trafi.
źródło
Elasticsearch 6.4
po prostu określ indeks i to wszystko w Kibanie
PRZED
PO
źródło
jeśli używasz es 6.7
Spróbuj tego
źródło
Możesz także użyć skryptu, który daje pewną elastyczność:
źródło
Kiedy użyjemy poniższego kodu, gdzie added_on to data, co się dzieje !! tekst atrybutu jest analizowany, co oznacza, że jest dzielony na odrębne słowa podczas przechowywania i umożliwia wyszukiwanie dowolnego tekstu na jednym lub kilku słowach w polu
więc istnieje „tekst” i „słowo kluczowe” powiązane z polami, więc jeśli musimy użyć agregacji w zapytaniu, potrzebujemy wartości pola jako słowa kluczowego.
źródło