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