Zadowolony
W dzisiejszych czasach mało kto chce wybierać produkty w sklepie internetowym, gdzie trzeba sortować kategorie lub przewijać długie listy produktów.
Istnieje wiele dostępnych narzędzi, które mogą sprawić, że wewnętrzne wyszukiwanie stron będzie szybkie, intuicyjne i dostosowane do potrzeb każdego klienta.

Wyszukiwarka Sphinx zdaje się obiecywać właśnie to. Wyszukiwarka pełnotekstowa jest zarówno elastyczna jak i szybka.
Sphinx działa jako samodzielny serwer i nie przechowuje tekstu dla siebie. Tworzy indeks na podstawie zapytania SQL, które pobiera dokumenty z bazy, przechowuje indeksy i w późniejszym etapie zwraca wiersze pasujące do zapytania.

Czym jest Sphinx
Wyszukiwarka Sphinx jest pełnotekstowa wyszukiwarka, który jest darmowy, szybki i skalowalny. Zaprojektowany z myślą o wydajności i przydatności. Nieporównywalne z żadną tradycyjną bazą danych.
Duża liczba znanych witryn o dużym natężeniu ruchu polega na nim w zakresie zaawansowanego wyszukiwania i skalowalności
Główne cechy Sphinxa
Sphinx pomaga umożliwić i zwiększyć wartość wyszukiwania i skalowalność dzięki następującym funkcjom, które sprawiają, że jest on popularny wśród tysięcy twórców i sprzedawców e-commerce.
- Wysoka prędkość wyszukiwania (do 150-250 Mbit/s na rdzeń przy 1 000 000 dokumentów).
- Obsługa rozproszonego wyszukiwania w czasie rzeczywistym.
- Wysoka prędkość indeksowania (do 10-15Mbit/s na rdzeń).
- Wysoka skalowalność (największy znanych klastrów jest w stanie zindeksować do 3 000 000 000 dokumentów i może obsłużyć ponad 50 milionów zapytań dziennie).
- Jednoczesna obsługa wielu pól (domyślnie do 32) dla pełnotekstowego wyszukiwania dokumentów.
- Możliwość obsługi wielu dodatkowych atrybutów dla każdego dokumentu (np. grupy, znaczniki czasu itp.). д.).
- Użycie stop words.
- obsługa różnych API języki programowania (np. dla PHP, Python, Java, Perl, Ruby, .NET i C ++ oraz t. д.).
- Możliwość obsługi kodowania pojedynczych bajtów, jak również UTF-8.
- Wyszukiwanie morfologiczne.
- Integracja z najpopularniejszymi systemami zarządzania bazami danych (np. MySQL, PostgreSQL)
W sumie wyszukiwarka Sphinx posiada ponad 50 różnych funkcji (i liczba ta stale rośnie).

Jak działa Sphinx
Cała złożoność schematu działania wyszukiwarki streszcza się w 2 kluczowych punktach:
- Używając tabeli źródłowej, Sphinx tworzy własną bazę danych indeksów;
- następnie, gdy użytkownik wyśle żądanie API, Sphinx zwróci tablicę identyfikatorów, które odpowiadają identyfikatorom w tabeli źródłowej.
Dlaczego warto używać Sphinxa
Głównym powodem, dla którego warto go używać jest szybkość wyszukiwania. Zwykłe wyszukiwanie w MySQL trwa znacznie dłużej niż wyszukiwanie w Sphinxie. Użytkownik zaczyna zauważać różnicę, gdy jego baza danych ma miliony rekordów. Jeśli baza danych jest mała (np. forum z 100 użytkownikami) nie ma takiej możliwości. Możesz jednak spróbować tego. Do tego dochodzą ciekawe funkcje jak morfologia słów (jeśli użytkownik wyszuka koty, to dopasuje koty, jeśli wyszuka jogging, to dopasuje bieganie, jogging itd.). д.).
Innym powodem jest wyszukiwanie pełnotekstowe. Czy komuś przyszło do głowy, że gdy zrobi wyszukiwanie w Google dla dwóch słów, to wyszuka je w tym samym akapicie lub w dwóch akapitach (lub w zdaniu), ale nie na całej stronie? Sphinx pozwala na robienie podobnych rzeczy.

Skalowalność jest następująca. Jeśli użytkownik posiada duże bazy danych na wielu serwerach, Sphinx zajmie się tym. A aplikacja będzie myśleć, że jest uruchomiona na tym samym serwerze. Sphinx może zdjąć większość ciężaru z serwerów PHP w zakresie obsługi i wyszukiwania informacji.
Sphinx różni się nieco od tego, do czego użytkownik jest przyzwyczajony przy zapytaniach MySQL. Nie oczekuj więc, że wszystko dostaniesz natychmiast.
Czym jest indeksowanie
Sphinx pobiera dane z tabeli w bazie danych MySQL i uruchamia proces zwany indeksowaniem. Indeksowanie tworzy plik, który można łatwo znaleźć za pomocą Sphinxa. Na przykład, jeśli użytkownik próbuje wyszukać dokument w Microsoft Word, będzie szukał słów po kolei w tekście dokumentu. W bardzo dużych dokumentach wyszukiwanie może być bardzo wolne. Sphinx z drugiej strony wykonuje indeksowanie przed wykonaniem jakiegokolwiek wyszukiwania. W ten sposób powstaje indeks, który może być efektywnie przeszukiwany, zamiast przeszukiwania słowo po słowie całego dokumentu. Dobrym przykładem jest indeks encyklopedii. Jeśli użytkownik chciał znaleźć informacje o kotach, mógł zrobić to, co zrobił Microsoft Word i przeczytać każdą stronę encyklopedii szukając pojawienia się słowa "kot". Albo może zajrzeć do indeksu alfabetycznego na końcu książki, gdzie jest napisane, że informacje o kotach pojawiają się na stronach 104, 195 i 653. O wiele łatwiej jest.

Możesz wyszukiwać tylko to, co jest zindeksowane
Należy pamiętać, że Sphinx może przeszukiwać tylko indeks. Oznacza to, że za każdym razem, gdy użytkownik chce znaleźć najnowsze wyniki, musi odświeżyć indeks.
Dostęp do danych
Jeśli użytkownik pracował już z PHP i MySQL, jest mu znacznie łatwiej. W przeciwnym razie powinien prawdopodobnie studiować PHP i MySQL.
Wyszukiwarka Sphinx zazwyczaj zwraca identyfikatory MySQL, a nie dane.
Najważniejszą rzeczą, którą należy pamiętać o Sphinxie jest to, że nie wyciąga on danych. Najpierw pobierane są identyfikatory dokumentów. Sphinx robi intensywną część, która szuka konkretnych rekordów. Użytkownik może następnie wykonać prostą część poprzez MySQL, która pobiera ten dokument. Tak więc na przykład, jeśli Sphinx pobiera ID dokumentu 1, 5 i 7 z indeksu, będzie musiał zapytać MySQL o rekordy (prawdopodobnie o ID 1,5 i 7). Możesz myśleć, że jest to prymitywne, ale MySQL wymaga bardzo mało zasobów do wyszukiwania identyfikatora dokumentu w porównaniu do wyszukiwania słowa.
Przykład. Powiedzmy, że Sphinx wyciąga dokumenty o ID 1, 5, 7 (SELECT * FROM documents WHERE id IN (1,5,7)).
Użytkownik informuje MySQL, co jest potrzebne aby wybrać wszystkie kolumny z tabeli dokumentów (lub dowolnej innej tabeli, która miała wynik), gdzie identyfikator (lub to, co zostało nazwane jego polem) jest 1, 5 lub 7. A następnie możesz użyć mysql_fetch_array w PHP, aby spojrzeć na dane i zrobić z nimi co chcesz.
Kiedy już opanujesz używanie Sphinxa do porządkowania wyników, możesz zapisać kolejność w następujący sposób:
- Zachowanie kolejności wyników w tablicy (wystarczy przechowywać właściwość id dla dopasowań).
- Wykonanie IMPLODE dla tablicy za pomocą $result = implode(",", $array) gdzie $array jest tablicą wyników użytkownika. Wynik będzie przechowywał oddzielony przecinkami ciąg identyfikatorów wyników. - SELECT * FROM dokumenty WHERE id IN ($result) ORDER BY FIELD(id,$result).
W tym miejscu użytkownik mówi MySQL, aby ułożył wyniki według pola id w kolejności podanej przez $result.
To może wydawać się skomplikowane, ale szybko można się do tego przyzwyczaić i wkrótce użytkownik sam będzie pisał funkcje, które będą to wszystko obsługiwać.

Końcowe wyniki
Używanie Sphinx zamiast MySQL może dać Ci dużą przewagę szybkościową. Sphinx jest idealny do wyszukiwania statycznych tabel. Ale w tym samym czasie dla często aktualizowanych ciągów nie jest możliwe użycie prostych plików indeksowych. Zamiast tego, powinieneś albo wdrożyć pliki delta, albo przejść na indeksowanie w czasie rzeczywistym. Oba rozwiązania wiążą się z dodatkowymi kosztami wydajności. Podsumowując, do efektywniejszej pracy ze Sphinxem potrzebne jest planowanie, ponieważ użytkownik musi mieć wcześniej zainstalowane wszystkie niezbędne źródła i pliki indeksowe.
Zamiana Sphinxa na MySQL nie jest trywialna, ale nie jest też tak trudno z niej zrezygnować. Jeśli wymagana jest duża szybkość wyszukiwania, warto rozważyć przejście z MySQL na Sphinx, nawet jeśli użytkownik nie potrzebuje wyszukiwania pełnotekstowego.