Ile razy zdarzyło Ci się stworzyć wyszukiwarkę dla użytkowników i później usłyszeć pytanie dlaczego konkretny rezultat znalazł się w wynikach wyszukiwania? Mnie niejednokrotnie. Częstotliwość podobnych pytań wzrasta wraz z ilością pól, które nie są widoczne na liście rezultatów, a po których również się wyszukuje. Dokładając do tego wyszukiwanie pełnotekstowe, które najprawdopodobniej zawiera „ukrytą” logikę analizy tekstu, sprawiamy, że z biegiem czasu samemu będzie nam ciężko od ręki odpowiedzieć na to pytanie. A gdyby tak od razu pokazać użytkownikowi dlaczego znalazł dany dokument? Elasticsearch daje nam taką możliwość i zaraz Ci o niej opowiem.

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. ...

Highlighting

Narzędziem, które chciałbym dzisiaj omówić jest highlighting i właśnie pod takim hasłem znajdziesz je w dokumentacji Elasticsearcha. To może po kolei…

Ale… o co chodzi?

Obstawiam, że kojarzysz feature wyszukiwarki Google (i wielu innych), który na liście rezultatów pokazuje fragmenty wyszukanego tekstu wraz z pogrubionymi słowami kluczowymi. Przykładowo wyszukując frazę elasticsearch how to start otrzymałem coś takiego:

Jak widać, wyrażenia takie jak Elasticsearch, start, czy get started zostały pogrubione. I właśnie taki efekt możemy osiągnąć wykorzystując highlighting z Elasticsearcha.

Jak tego użyć?

Bardzo prosto. Jeżeli nasze podstawowe wyszukiwanie wygląda tak:

to to samo zapytanie z najprostszym użyciem highlightingu prezentuje się następująco:

Odpowiedzi na powyższe zapytania będą różniły się analogicznie – te z użyciem „zakreślacza” będzie bogatsze o pole highlight zawierające informacje o miejscu znalezienia dopasowania. Dopasowany fragment tekstu opakowywany jest domyślnie w tagi <em></em>.

W powyższym przykładzie wyszukujemy tylko po jednym polu, więc prosimy Elasticsearcha, żeby zwrócił nam informacje o dopasowaniach dla tego konkretnego pola. Niemniej jednak nie jest problemem prosić o zwrócenie dopasowań tylko z części pól, po których wyszukujemy. Dodatkowo, na wiele sposobów, możemy określić również w jakiej formie owe odpowiedzi mają do nas wracać.

Możliwości konfiguracyjne

Co w takim razie możemy skonfigurować? Przede wszystkim rodzaj algorytmu wykorzystywanego do znalezienia dopasowań. Ma to szczególne znaczenie gdy do naszego Elasticsearcha wrzucamy długie teksty, co jest zresztą zaznaczone w dokumentacji.

Oprócz tego dla każdego pola możemy określić, czy chcemy otrzymywać całą zawartość pola z zaznaczonymi dopasowaniami, czy tylko jego fragmenty (znów: przydatne przy długich treściach). Jeżeli zdecydujemy się na fragmenty to możemy określić ich maksymalną ilość lub to czy mają obejmować pełne zdania, czy słowa.

Elasticsearch pozwala nam powiedzieć również ile tekstu ma zwracać w przypadku nieznalezienia dopasowania w danym polu i czy w ogóle ma to robić. Możemy również określić w jaki sposób mają zostać oznaczone zwracane do nas dopasowania, jeżeli domyślne tagi <em></em> nam nie pasują.

Po szczegóły i więcej informacji odsyłam do dokumentacji.

Zalety

Jest szybko, łatwo i przyjemnie 🙂

Wady

Zakreślanie dopasowań jest dosyć kosztowną operacją, szczególnie gdy chcemy robić je na dużej ilości pól lub na polach zawierających dużo tekstu (o czym zdążyłem się już przekonać). Jednak użyte z rozwagą nie powinno sprawiać większych problemów.

The End

To tyle w temacie. IMHO highlighting jest jedną z tych funkcjonalności, którą użytkownicy wyszukiwarek przyjmą z otwartymi ramionami. Niezależnie od tego, czy będziesz lub nie będzie wdrażał(a) highlighting dla użytkowników Twojej wyszukiwarki, to zawsze możesz użyć go jako furtki do sprawdzenia dlaczego dany dokument znalazł się w wynikach wyszukiwania, kiedy tylko padnie taka prośba.

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ą.

Zgoda? Zapisując się do newslettera wyrażasz zgodę na przesyłanie Ci starannie wyselekcjonowanych informacji marketingowych. Powyższe dane są przechowywane w systemie MailChimp i nie są udostępniane nikomu więcej.

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ć :)

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.

1 000 000 zł

Milion złotych. Tak, milion złotych. Milion złotych to cel, który sobie postawiłem jakiś czas temu. Chcę zarobić milion złotych na tym blogu. Do tej pory zebrało się 39 452,09 zł, więc jak widzisz jest już co pokazać, ale do celu nadal sporo brakuje. Jeszcze nie wiem do końca jak, ale to zrobię. Na pewno nigdy nie będę pobierał żadnych opłat za dostęp do treści, bo tymi chcę się po prostu dzielić.

Wysoko ponad ten milion stawiam na szerzenie wiedzy i dotarcie do jak największej liczby osób. I tu mam prośbę do Ciebie: jeśli uważasz, ten artykuł za wartościowy, to udostępnij go proszę swoim znajomym. Przy lewej lub dolnej (na małych wyświetlaczach) krawędzi ekranu znajdziesz przyciski, które Ci to ułatwią. Jeżeli ich nie widzisz, to najprawdopodobniej zostały zablokowane przez Twój program do blokowania reklam. Niezależnie od tego, czy prześlesz ten wpis dalej, czy nie, to ja i tak dziękuję Ci serdecznie za doczytanie do tego miejsca! Do przeczytania niebawem.

PS. Jeśli mój blog przypadł Ci do gustu tak bardzo, że chciał(a)byś mi się w jakiś sposób odwdzięczyć, to mam dla Ciebie kilka ciekawych propozycji, z których możesz skorzystać. Szczególnie gorąco zachęcam do wsparcia poprzez serwis Patronite, ale jeżeli zdecydujesz się na którąkolwiek z wymienionych opcji, to serdecznie Ci za to DZIĘKUJĘ!

Picture Credits
Tribute to Patrons