Solr Text Tagger – Szybkie spojrzenie w Solr 7.4

Dawno nie publikowaliśmy żadnych treści o Solr, poza chwilami, kiedy wychodziła nowsza wersja tego silnika pełnotekstowego i biblioteki Lucene. Postanowiliśmy to zmienić i przyjrzeć się funkcjonalności tagowania tekstu, która wprowadzona została wraz z najnowszym wydaniem Solr. Umożliwia ona proste tagowanie oparte o wcześniej zdefiniowane dane, które mogą zawierać dodatkowe meta dane, jeżeli tylko chcemy. Spójrzmy więc, czego spodziewać się po tej funkcjonalności.

Przygotowania

Postaramy się, aby proces przygotowania bym najkrótszy z możliwych. W związku z tym zaczynamy uruchamiając instancję Solr w następujący sposób:

Następnie tworzymy kolekcję o nazwie test:

Będziemy korzystać z domyślnej konfiguracji Solr, która pozwala nam zapomnieć o strukturze danych, przynajmniej w pewnych, ograniczonych warunkach. Należy pamiętać, aby nie wykorzystywać domyślnej konfiguracji, jako tej, z którą można iść na produkcję.

Dane do tagowania

Skupmy się na chwilę na danych. Po pierwsze potrzebujemy danych, które posłużą nam jako te, którymi będziemy tagować. Na przykład użyjmy następujących nazwisk:

Aby przygotować je do tego, aby możliwe było skorzystanie z tagowania konieczna jest nieznaczna modyfikacja domyślnej konfiguracji – dodanie nowego typu pola, dodanie dwóch pól oraz kopiowania wartości jednego pola do drugiego. To wszystko możemy dodać do konfiguracji naszej kolekcji następującym poleceniem:

Zatrzymajmy się na chwilę i zastanówmy dlaczego dodaliśmy poszczególne elementy konfiguracji. Po pierwsze dodaliśmy nowy typ nazwany tag. Pozwala on funkcjonalności tagowania działać. Kluczowe są tak naprawdę dwie rzeczy – właściwość postingsFormat ustawiona na wartość FST50 oraz filtr solr.ConcatenateGraphFilterFactory, jako ostatni filtr w trakcie indeksowania.

Następna sprawa to tagi. Potrzbujemy pola, które będzie przechowywać dane, pola, które będzie umożliwiło działanie tagera, czyli pól name oraz name_tag. I oczywiście automatycznego kopiowania.

Mając to wszystko możemy zaindeksować nasze tagi korzystając z następującego polecenia:

Tagowanie tekstu

Teraz, mając już zaindeksowane dane, które nas interesują możemy spróbować tagowania na tekście potencjalnie zawierającym te dane. Jednak przed tym dodajemy nowy requets handler korzystając z następującego polecenia:

Powyższe polecenie dodaje nowy request handler o nazwie  /tagger oparty o klasę solr.TaggerRequestHandler. Po tym możemy wreszcie wysłać zapytanie do nowego handlera:

Wynik zwrócony przez Solr wygląda następująco:

Jak widać wzrócone zostały tagi wraz z ich występowaniem w tekście – każdy z nich ma odpowiednie informacje pozwalające na identyfikację. W ramach odpowiedzi od Solr dostaliśmy także listę znalezionych tagów – w sumie wszystko co jest potrzebne 🙂

Dodatkowe opcje tagera

Oczywiście Solr pozwala nam na kontrolę nowej funkcjonalności. Oprócz parametru fl oraz właściwości field możemy także korzystać z filtrów, definiować maksymalną ilość wyników, czy wybierać algortym radzący sobie z tagami, które zachodzą na siebie oraz kilka innych. Pełną listę opcji można znaleźć w oficjalnej dokumentacji Solr: https://lucene.apache.org/solr/guide/7_4/the-tagger-handler.html.

Wydajność

Chcieliśmy także wspomnieć o kilku rzeczach związanych z wydajnością funkcjonalności tagowania tekstu. Po pierwsze, w wersji 7.4.0 Solr, handler tagowania nie jest w stanie przyjąć więcej, niż jednego dokumentu na raz. Oznacza to, iż nie ma łatwej możliwości wysyłania wielu dokumentów na raz. Oczywiście można sklejać dokumenty i wysyłać je jako pojedynczy ciąg tekstu, aczkolwiek nie jest to zbyt eleganckie rozwiązanie. Warto także pamiętać, iż tagowanie działa w oparciu o indeks Lucene i jest swego rodzaju wyszukiwaniem. Oznacza to, iż im mniej segmentów ma nasz indeks zawierający tagi, tym potencjalnie szybsze będą zapytania tagujące. Wartto więc zastanowić się nad optymalizacją kolekcji i wymuszeniem pojedynczego segmentu.

Ograniczenia

Ostatnia rzecz o której chcieliśmy wspomnieć to ograniczenia. W chwili pisania tego tekstu, czyli w wersji 7.4.0 Solr tagowanie możliwe jest tylko w przypadku kolekcji zbudowanej z pojedynczego shardu. Niewykluczone, iż zmieni się to w przyszłości, jednak na razie należy o tym pamiętać.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.