Przetwarzanie tekstu

Wyszukiwanie pełnotekstowe

Zespół Optymeo
Logo Solr
(Logo Solr : Logo Solr )

Wyszukiwanie pełnotekstowe (ang. full-text search) -  umożliwia sprawne  i wydajne przeszukiwanie zbiorów danych według kryteriów określonych przez użytkownika uwzględniającego odmianę wyrazów, błędy ortograficzne,  synonimy oraz zwracanie dokumentów według założonej z góry ich oceny. 

Jeżeli chcesz mieć wyszukiwanie pełnotekstowe na swojej stronie i najprawdopodobniej doszedłeś do miejsca, gdzie relacyjna baza danych staje się już mało wydajna, albo zupełnie nieprzydatna, to zobacz jakimi rozwiązaniami powinieneś się zainteresować. W tym artykule przedstawię Ci, jaką technologią open source warto się zainteresować, a w kolejnych pokażę, jak wdrożyć ją nawet na małej stronie WWW.     

Myśląc poważnie o wyszukiwaniu pełnotekstowym, warto zainteresować się Solr lub Elasticsearch — jednym z dwóch najpopularniejszych i najbardziej zaawansowanych silników wyszukiwania opartych na bibliotece Lucene.  My w Optymeo używamy obu rozwiązań, ale częściej przy rozwojowych produktach skłaniamy się do Solr. Przemawia za tym znakomity panel webowy, który często zastępuje niektóre funkcjonalności, które trzeba by było dopisać w Elasticu. 

Oprócz tych dwóch rozwiązań, które są standardem rynkowym, przebijają się takie rozwiązania jak: Algolia, Whoosh, Xapian czy Sphinks. 

Jakie możliwości daje Solr?

Analiza językowa - zaawansowane przetwarzanie języka naturalnego, które umożliwia Solr skuteczne indeksowanie i wyszukiwanie informacji. Funkcjonalność ta obejmuje m.in. tokenizację, stemming, lematyzację oraz rozpoznawanie języka. Dzięki temu Solr potrafi zrozumieć i odpowiednio przetworzyć różnorodne formy słów, co przekłada się na bardziej trafne i precyzyjne wyniki wyszukiwania. Analiza językowa jest kluczowym elementem, który czyni Solr potężnym narzędziem, zdolnym do obsługi zapytań w wielu językach i kontekstach, co jest niezwykle istotne w globalnych aplikacjach wyszukiwawczych.

Highlithing - wyciąganie fragmentów odpowiedzi dokumentów (treści), które pasują dokładnie do zadanego pytania przez użytkownika oraz zaznaczanie tego fragmentu w całej treści.  Sprawdza się idealnie w wyszukiwarce blogowej lub na portalu internetowym.

Highlithing Solroptymeo.pl | ilustracja | zwrócona odpowiedź z API Solr-a | Highlithing Solr

Faceting - wyciąganie kategorii (ogólnie taksonomii) na podstawie zapytania. Funkcjonalność ta jest wykorzystywana do budowania zaawansowanych wyszukiwarek i porównywarek sklepowych, bo faceting ułatwia użytkownikom przeglądanie wyników wyszukiwania poprzez zawężanie tych wyników. 

Autocomplete – bardzo wydajne podpowiadanie szukanej frazy. Możemy wdrożyć funkcjonalność podobną do podpowiadania w wyszukiwarce Google. 

Related -  a dokładnie plugin, który nazywa się MoreLikeThis  i umie zwracać podobne treści do podanych dokumentów. Idealnie sprawdza się do sugerowania innej treści dla użytkowników.  Świetne rozwiązanie pod SEO.

Wbudowany panel webowy, który w Elasticu często bywa pomijany lub wymaga dodatkowych narzędzi zewnętrznych. Ten panel, analogicznie do PHPMyAdmin w kontekście MySQL, ułatwia zarządzanie i monitorowanie instancji Solr, pozwalając na wygodne przeglądanie danych oraz analizowanie wyników zapytań. Dzięki temu użytkownicy mogą szybciej i efektywniej pracować z Solr, bez konieczności sięgania po dodatkowe rozwiązania.

Jakie możliwości daje Elasticsearch?

 

Elastic Stack (ELK Stack) -  Elasticsearch jest centralnym elementem Elastic Stack (ELK Stack), który obejmuje również Logstash do przetwarzania danych oraz Kibana do ich wizualizacji. Elastic Stack pozwala na gromadzenie, przetwarzanie i analizę dużych ilości danych w czasie rzeczywistym, co sprawia, że jest idealnym rozwiązaniem dla analizy logów, monitorowania wydajności aplikacji, oraz zarządzania danymi.

 

Full-text search - Elasticsearch oferuje zaawansowane możliwości pełnotekstowego wyszukiwania. Jest to funkcja kluczowa w budowie wyszukiwarek dla stron internetowych, aplikacji, czy systemów zarządzania treścią. Wykorzystuje ona mechanizmy takie jak analizatory językowe, tokenizacja i wyszukiwanie rozmyte, co umożliwia precyzyjne odnajdywanie wyników na podstawie zapytań użytkownika. Full-text search ma identyczne możliwości analizy językowej jaką posiada Solr. 

Rozproszona architektura i skalowalność - Elasticsearch został zaprojektowany z myślą o rozproszonej architekturze, co umożliwia skalowanie systemu w poziomie. Dzięki temu można dodawać nowe węzły do klastra, co zwiększa zarówno moc obliczeniową, jak i pojemność przechowywania danych. Skalowalność ta jest kluczowa w aplikacjach o dużym natężeniu ruchu lub w projektach wymagających przetwarzania ogromnych ilości danych. 

Kibana jest narzędziem do wizualizacji danych przechowywanych w Elasticsearch. Umożliwia tworzenie interaktywnych dashboardów, wykresów oraz map, co pozwala na intuicyjne analizowanie złożonych danych. Kibana wspiera również tworzenie raportów i monitorowanie w czasie rzeczywistym, co jest niezwykle pomocne w kontekście analizy biznesowej i operacyjnej.

Logstash to narzędzie do przetwarzania i przesyłania danych, które integruje się z Elasticsearch. Pozwala na gromadzenie danych z różnych źródeł, ich filtrowanie, przekształcanie oraz przesyłanie do Elasticsearch w celu dalszej analizy. Logstash jest elastyczny i wspiera różnorodne formaty danych, co czyni go uniwersalnym narzędziem do zarządzania strumieniami danych.

Beats to lekki agent do przesyłania danych z różnych źródeł bezpośrednio do Elasticsearch lub Logstash. W ramach rodziny Beats dostępne są różne typy agentów, takie jak Filebeat do zbierania logów plików, Metricbeat do monitorowania systemów i aplikacji, czy Packetbeat do monitorowania ruchu sieciowego. Beats zapewniają niską latencję oraz prostą konfigurację, co ułatwia zbieranie i przesyłanie danych.

Solr i Elasticsearch jako wydajny silnik listingów

Sorl i Elasticsearch dzięki sprawnemu mechanizmowy indeksacji (real-time indexing) w swoim silniku nowych dokumentów może służyć jako znakomity mechanizm do budowania listingów w bardzo dużych serwisach internetowych. Na Polskim i zagranicznym rynku stoją na tym największe e-commerce i serwisy z dużymi bazami do przeszukiwania. 

Silniki te dzięki wielu możliwościom indeksacji (tak jakby import danych) dokumentów zintegrujesz z każdym rodzajem obecnych CMS-ów na rynku. W zależności od potrzeb zrobisz to za pomocą restowego API lub w Solr dzięki DataImportHandler dostępu do bazy relacyjnej, lub wygenerowanych przez Ciebie dokumentów XML, lub plików CSV. 

Wdrażamy takie rozwiązania w stronach opartych o PHP (WordPress, Laravel). Jeśli potrzebujesz takiego rozwiązania, to odezwij się do nas na kontakt.

Czy jest możliwe wyszukiwanie pełnotestowe w relacyjnych bazach danych?

Jest możliwe takie wyszukiwanie, nie dorasta jednak wydajnością i funkcjonalnościami, jakie przedstawiliśmy wyżej.  Brak analizy językowej sprowadza nas kilka poziomów niżej. 

Przykładowo MySQL (też. MariaDB) oferuje funkcję wyszukiwania pełnotekstowego, która pozwala przeszukiwać kolumny tekstowe, takie jak VARCHAR i TEXT. Wyszukiwanie to jest dostępne w dwóch trybach:

  • Natural Language Mode: Przeszukiwanie w trybie języka naturalnego, które zwraca wyniki według ich trafności.
  • Boolean Mode: Tryb wyszukiwania logicznego, umożliwiający użycie operatorów takich jak +, -, oraz *, co pozwala na bardziej precyzyjne filtrowanie wyników.

  

Mimo że MySQL to oferuje podstawowe funkcje wyszukiwania pełnotekstowego, napotyka na kilka istotnych ograniczeń:

  • Wydajność: MySQL dobrze radzi sobie z małymi zbiorami danych, ale jego wydajność gwałtownie spada w przypadku dużych ilości danych. Wyszukiwanie pełnotekstowe w MySQL nie jest zoptymalizowane do obsługi milionów rekordów, co prowadzi do długich czasów odpowiedzi na zapytania.

  • Brak zaawansowanych funkcji: MySQL nie oferuje takich funkcji jak faceting, fuzzy search, czy analiza językowa. Wyszukiwanie jest dość podstawowe i może nie spełniać potrzeb bardziej zaawansowanych aplikacji.

  • Skalowalność: MySQL nie jest zaprojektowany do łatwej skalowalności w rozproszonych środowiskach. Dodanie nowych węzłów czy replikacja bazy może być skomplikowana i nie przynosić oczekiwanych korzyści wydajnościowych.

 

Solr i Elasticsearch są zaprojektowane z myślą o przetwarzaniu ogromnych ilości danych i wysokiej wydajności. Dzięki architekturze rozproszonej i możliwości łatwego skalowania, te silniki potrafią obsługiwać bardzo duże zbiory danych bez zauważalnego spadku wydajności a analiza językowa to przeskok do tradycyjnych zapytań SQL w stylu LIKE %%.

 


Czy ten artykuł był Ci pomocny? Jesteśmy doświadczoną agencją SEO, skontakuj się z nami, jeśli potrzebujesz pomocy ze swoją stroną.

Spotkajmy się też w moich social media :
Zobacz moje wszystkie artykuły
Zaufali nam:
ElbudBis
Instytu cyfrowego obywatelstwa
Kinesso
Fundacja Orange
Rodzice.pl

Współpracuj z nami!

Naszą mocą jest technologia i doświadczony zespół

Przez lata zdobywaliśmy doświadczenie u największych wydawców w Polsce, a teraz zadbamy o rozwój Twojej firmy od strategii wzrostu po wdrożenia na stronach dzięki naszemu własnemu software house'owi. Zaufaj nam, aby osiągać dobre wyniki.

Porozmawiajmy o Twoich celach i potrzebach!

Przejrzyj najnowsze artykuły i wpisy na naszym blogu