5

Używamy ElasticSearch do przeszukiwania milionów tagów. Nasi użytkownicy powinni mieć możliwość dodawania operatorów boolowskich (+, -, "xy", AND, OR, nawiasów). Jeśli nie zostaną zwrócone żadne trafienia, cofamy się do sugestii pisowni dostarczonej przez ES i ponownie szukamy. Oto nasze zapytanie:Jak włączyć nieostrość w zapytaniach do fraz w ElasticSearch

$ curl -XGET 'http://127.0.0.1:9200/my_index/my_type/_search' -d ' 
{ 
    "query" : { 
     "query_string" : { 
      "query" : "some test query +bools -included", 
      "default_operator" : "AND" 
     } 
    }, 
    "suggest" : { 
     "text" : "some test query +bools -included", 
     "simple_phrase" : { 
      "phrase" : { 
       "field" : "my_tags_field", 
       "size" : 1 
      } 
     } 
    } 
} 

Zamiast tylko proponować rezygnację z sugestii pisowni, chcemy włączyć dopasowanie rozmyte. Jeśli na przykład użytkownik wyszuka hasło "stackoverfolw", ES powinno zwrócić wyniki "stackoverflow".

Dodatkowe pytanie: Jaka jest skuteczniejsza metoda "poprawiania" błędów pisowni? Tak jak obecnie, musimy wykonać dwie kolejne prośby, najpierw z pierwotnym wyszukiwanym terminem, a następnie z sugerowanym przez ES terminem.

Odpowiedz

4

Łańcuch query_string obsługuje pewne rozmytości, ale tylko w przypadku użycia operatora ~, który moim zdaniem nie jest twoim przypadkiem. Dodałbym wtedy fuzzy query i umieściłem go w istniejącym łańcuchu query_string. Na przykład można użyć parametru bool query i dodać zapytanie fuzzy jako klauzula powinna, zachowując oryginalny ciąg query_string jako klauzulę musi.

Co do dodatkowego pytania o poprawianie błędów pisowni: użyłbym zapytań rozmytych do ich automatycznej korekty i dwóch kolejnych żądań, jeśli chcesz, aby użytkownik wybrał poprawną korektę z listy (np. Czy miałeś na myśli), ale Twoje podejście też brzmi dobrze.

+0

Dzięki - to potwierdza moje myśli. W każdym razie trzymamy się tego, co już mamy. Wydaje się, że jest to znacznie szybsze podejście. Jeśli chodzi o "zapytanie rozmyte", dokumenty ElasticSearch wspominają nawet ostrzeżenie o tym, że nie są dobrze skalowalne. –