W jednym z poprzednich artykułów wspominałem, że na jakość wyników wyszukiwania wpływa odpowiednie przygotowanie tekstu. Jednym z kroków tego procesu jest użycie filtrów tokenów, których, tak jak już pisałem, jest całkiem sporo. Dziś chciałbym skupić się na działaniu jednego konkretnego, ułatwiającego wyszukiwanie wyrazów bliskoznacznych.

Cykl artykułów "Uczymy się Elasticsearch"

Ten wpis jest częścią cyklu, w którym staram się pokazać w jaki sposób możesz zbudować przyjazną dla użytkownika wyszukiwarkę, wykorzystując do tego celu potężny silnik wyszukiwania jakim jest Elasticsearch.

Do tej pory w ramach cyklu ukazały się następujące artykuły:

  1. instalacja, uruchomienie i pierwsze zapytanie
  2. kilka słów na temat Elastic Stack
  3. przydatne narzędzia
  4. indeks odwrócony Apache Lucene
  5. wyszukiwanie pełnotekstowe
  6. trafność
  7. przygotowanie tekstu do optymalnego wyszukiwania
  8. coś poszło nie tak, czyli seria moich fackupów
  9. zaczarowany zakreślacz
  10. o co jeszcze możemy zapytać?
  11. schowaj się za aliasem
  12. zadbaj o bezpieczeństwo
  13. wstępne procesowanie dokumentów przed indeksowaniem
  14. przegląd klientów języka Java
  15. synonimy w wynikach wyszukiwania
  16. ...

Synonym Token Filter

Synonym Token Filter, bo o nim mowa umożliwia przygotowanie takiego analizatora, który do puli tokenów dorzuci odpowiednio zdefiniowane przez nas synonimy. Zobaczmy jego działanie na przykładzie.

Przykładowe działanie

Załóżmy, że nasz indeks ma przechowywać feedback przekazany przez użytkowników na temat działania pewnej aplikacji. Spośród wszystkich przekazanych nam opinii, chcielibyśmy mieć możliwość wyszukania zgłoszonych problemów.

Zacznijmy więc od wrzucenia do indeksu jakiegoś feedbacku. Zauważ, że nie konfigurujemy tu indeksu sami, więc Elasticsearch wygeneruje go na podstawie domyślnych ustawień:

Spróbujmy teraz wyszukać wszystkie problemu naszych użytkowników:

Jak widać poniżej, Elasticsearch nie widzi żadnego problemu. Być może sam wie jak wyjść z VIM-a, ale nie chcę się tym podzielić 😉 Prawda jest jednak inna. Szymon nie użył słowa-klucza, po którym szukamy:

Pomóżmy więc Elasticsearchowi przygotować indeks, który będzie tańczył tak, jak mu zagramy. Definiujemy filtr typu synonym i poprzez parametr synonyms definiujemy naszą listę synonimów. Poniższa konfiguracja mówi tyle, że słowa: problem, dylemat, kłopotwyzwanie są równoważnymi sobie synonimami. Oznacza to, że wyszukiwanie po którymś z nich spowoduje wyszukanie rezultatów zawierających dowolny element z tej listy. Filtr synonimów, używamy w analizatorze, który zostanie wykorzystany dla pola content:

Wrzućmy teraz ten sam feedback do nowo przygotowanego indeksu:

I wyszukajmy w ten sam sposób:

„Houston, mamy problem”… no może dylemat 😉 Teraz już wiemy, że musimy pomóc Szymonowi wyjść z VIM-a:

Konfiguracja synonimów

Mamy dwa sposoby na przekazanie konfiguracji synonimów. Tak jak pokazałem powyżej, możemy użyć parametru synonyms i wrzucić listę bezpośrednio. Możemy też, poprzez parametr synonyms_path, wskazać plik konfiguracyjny. Parametr oczekuje ścieżki do pliku, który zostanie umieszczony wewnątrz katalogu config (bezpośrednio lub w dowolnym podkatalogu).

Obydwie opcje mają swoje plusy i minusy. Wrzucenie listy bezpośrednio utrudni nam nieco jej późniejsze aktualizacje, a sama lista może stać się nieczytelna, gdy będzie się rozrastać. Tych minusów unikniemy korzystając z listy synonimów w pliku. Z drugiej strony, korzystając z pliku konfiguracyjnego musimy pamiętać, żeby znalazł się on i wyglądał tak samo na każdym węźle naszego Elasticsearcha. W przeciwnym przypadku, przy różnych konfiguracjach, część wyników wyszukiwania może być nieoczekiwanie pomijana, a problem będzie trudny do zdiagnozowania. Tej niedogodności unikniemy korzystając z wrzucania listy synonimów bezpośrednio, gdyż jest ona zawsze spięta z indeksem i propagowana na wszystkie wykorzystywane przez indeks węzły.

Format konfiguracji

Tutaj również mamy dwie opcje. Konfiguracja może zostać sformatowana na styl Solr lub WordNet. Solr jest domyślnym formatowaniem. Jeżeli chcemy przełączyć się na WordNet musimy określić to przy pomocy parametru… format 🙂

Solr

Format Solr jest bardzo prosty:

  • każdy wiersz to kolejna definicja synonimów,
  • synonimy, które są równoważne oddzielamy przecinkami (tak jak w przykładzie powyżej),
  • synonimy „jednokierunkowe” definiujemy przy pomocy =>.

Przykład

WordNet

WordNet pozostawiam jako pracę domową 😉

The End

Mam nadzieję, że dzisiejszy wpis, tak jak i poprzednie, pomoże Ci usprawnić swoją wyszukiwarkę. Daj znać w komentarzu, czy tak się stało. Napisz też, w jaki sposób Ty wychodzisz z VIM-a 😉


Bądź na bieżąco!

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:




Uwaga! Jeżeli w ciągu 24-godzin od zapisania się na listę mailingową nie otrzymasz wybranego przez siebie prezentu to skontaktuj się ze mną.

Powyższe dane są przechowywane w systemie GetResponse i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.

Picture Credits