Sfinks (wyszukiwarka)
Deweloperzy | Andrzej Aksjonow |
---|---|
Pierwsze wydanie | 2001 |
Wersja stabilna | |
Napisane w | C++ |
System operacyjny | Linux, Windows, Solaris, FreeBSD, NetBSD, Mac OS, AIX |
Typ | Szukaj i indeksuj |
Licencja | GPLv2 i komercyjne; zastrzeżony od wersji 3 |
Strona internetowa |
|
Sphinx to wyszukiwarka pełnotekstowa , która zapewnia aplikacjom klienckim funkcjonalność wyszukiwania tekstowego.
Przegląd
Sphinx może być używany jako samodzielny serwer lub jako silnik pamięci („SphinxSE”) dla rodziny baz danych MySQL. Uruchomiony jako samodzielny serwer Sphinx działa podobnie do DBMS i może komunikować się z MySQL , MariaDB i PostgreSQL poprzez ich natywne protokoły lub z dowolnym DBMS zgodnym z ODBC przez ODBC . MariaDB , rozwidlenie MySQL, jest dystrybuowane ze SphinxSE.
SphinxAPI
Jeśli Sphinx działa jako samodzielny serwer, możliwe jest użycie SphinxAPI do połączenia z nim aplikacji. Oficjalne implementacje API są dostępne dla PHP , Java , Perl , Ruby i Python . Dostępne są również nieoficjalne implementacje dla innych języków, a także różne wtyczki i moduły stron trzecich. Inne źródła danych mogą być indeksowane za pomocą potoku w niestandardowym XML .
SphinxQL
Demon wyszukiwania Sphinx obsługuje binarny protokół sieciowy MySQL i można uzyskać do niego dostęp za pomocą zwykłego interfejsu API MySQL i/lub klientów. Sphinx obsługuje podzbiór SQL znany jako SphinxQL. Obsługuje standardowe zapytania dotyczące wszystkich typów indeksów za pomocą SELECT, modyfikowanie indeksów w czasie rzeczywistym za pomocą INSERT, REPLACE i DELETE i nie tylko.
Sfinks SE
Sphinx może również zapewnić specjalny silnik przechowywania dla baz danych MariaDB i MySQL. Pozwala to tym MySQL, MariaDB komunikować się z searchd
Sphinxa, aby uruchamiać zapytania i uzyskiwać wyniki. Indeksy Sphinx są traktowane jak zwykłe tabele SQL. Silnik pamięci masowej SphinxSE jest dostarczany z MariaDB.
Pola pełnotekstowe i indeksowanie
Sphinx jest skonfigurowany do badania zestawu danych za pomocą swojego indeksatora. Proces Indexer tworzy indeks pełnotekstowy (specjalna struktura danych , która umożliwia szybkie wyszukiwanie słów kluczowych) z podanych danych/tekstu. Pełny tekst pola to wynikowa treść, która jest indeksowana przez Sphinx; można je (szybko) przeszukiwać pod kątem słów kluczowych. Pola mają nazwy i można ograniczyć wyszukiwanie do pojedynczego pola (np. wyszukiwanie tylko według „tytułu”) lub podzbioru pól (np. tylko do „tytułu” i „streszczenia”). Format indeksu Sphinxa ogólnie obsługuje do 256 pól. Należy zauważyć, że oryginalne dane nie są przechowywane w indeksie Sphinx, ale są odrzucane podczas procesu indeksowania; Sphinx zakłada, że przechowujesz te treści gdzie indziej.
Atrybuty
Atrybuty to dodatkowe wartości powiązane z każdym dokumentem, których można użyć do przeprowadzenia dodatkowego filtrowania i sortowania podczas wyszukiwania. Atrybuty są nazwane. W nazwach atrybutów nie jest rozróżniana wielkość liter. Atrybuty nie są indeksowane w pełnym tekście; są one przechowywane w indeksie bez zmian. Obecnie obsługiwane typy atrybutów to:
- liczby całkowite bez znaku (o szerokości od 1 do 32 bitów);
- znaczniki czasu systemu UNIX ;
- wartości zmiennoprzecinkowe (32-bitowe, pojedyncza precyzja IEEE 754);
- ciągi porządkowe (specjalnie obliczone liczby całkowite);
- smyczki
(od wersji 1.10-beta);
(od wersji 2.1.1-beta);
- MVA, atrybuty wielowartościowe (listy o zmiennej długości 32-bitowych liczb całkowitych bez znaku).
Atrybuty JSON w Sfinksie
Sphinx, podobnie jak klasyczne bazy danych SQL , pracuje z tzw. ustalonym schematem , czyli zestawem predefiniowanych kolumn atrybutów. Działają one dobrze, gdy większość przechowywanych danych faktycznie ma wartości: mapowanie rzadkich danych na kolumny statyczne może być uciążliwe. Załóżmy na przykład, że prowadzisz porównywarkę cen lub serwis aukcyjny z wieloma różnymi kategoriami produktów. Niektóre atrybuty, takie jak cena lub dostawca, są identyczne we wszystkich towarach. Ale stamtąd, w przypadku laptopów, musisz również przechowywać wagę, rozmiar ekranu, typ dysku twardego, rozmiar pamięci RAM itp. I, powiedzmy, w przypadku łopat, prawdopodobnie chcesz przechowywać kolor, długość rączki i tak dalej. Jest to więc możliwe do zarządzania w ramach jednej kategorii, ale wszystkie odrębne pola, których potrzebujesz dla wszystkich towarów we wszystkich kategoriach, są legionem. Aby temu zaradzić, można użyć pola JSON. Wewnątrz atrybutu JSON nie potrzebujesz stałej struktury. Możesz mieć różne klucze, które mogą, ale nie muszą, być obecne we wszystkich dokumentach. Kiedy spróbujesz filtrować według jednego z tych kluczy, Sphinx zignoruje dokumenty, które nie mają klucza w atrybucie JSON i będzie działał tylko z tymi dokumentami, które go mają.
Licencja
Do wersji 3 Sphinx jest licencjonowany podwójnie ; albo:
- Powszechna Licencja Publiczna GNU wersja 2 lub
- licencjonowanie własnościowe jest dostępne dla przypadków użycia, które nie są objęte warunkami GNU GPLv2.
Od wersji 3 Sphinx stał się zastrzeżony, z obietnicą wydania swojego kodu źródłowego w przyszłości
Sphinx używa przykładów
- Craigslist.org
- Recruitment.aleph-graymatter.com
- Tradebit.com
- vBulletin.com
- Rozszerzenie MediaWiki
- Boardreader.com
- OMBE.com
- Limundo.com
Lista funkcji
- Indeksowanie pełnotekstowe wsadowe i przyrostowe (miękkie w czasie rzeczywistym).
- Obsługa atrybutów nietekstowych ( skalary , ciągi znaków , zestawy , JSON).
- Bezpośrednie indeksowanie baz danych SQL. Natywna obsługa MySQL , MariaDB , PostgreSQL , MSSQL oraz łączność ODBC .
- Obsługa indeksowania dokumentów XML.
- Obsługa wyszukiwania rozproszonego od razu po wyjęciu z pudełka.
- Integracja za pośrednictwem interfejsów API dostępu .
- Obsługa składni podobnej do SQL przez protokół MySQL (od 0.9.9)
- Składnia wyszukiwania pełnotekstowego.
- Przetwarzanie zestawu wyników podobne do bazy danych.
- Ranking trafności z wykorzystaniem dodatkowych czynników oprócz standardowego BM25 .
- Obsługa przetwarzania tekstu dla kodowań SBCS i UTF-8 , stopwordów , indeksowania słów, o których wiadomo, że nie pojawiają się w bazie danych („bez trafień”), stemmingu , form słów, wyjątków tokenizacji i „znaków mieszanych” (podwójne indeksowanie jako znak i separator słów).
- Obsługuje UDF (od wersji 2.0.1).
Wydajność i skalowalność
- Szybkość indeksowania do 10-15 MB/s na rdzeń i HDD.
- Szybkość wyszukiwania ponad 500 zapytań/s przy 1 000 000 dokumentów/1,2 GB kolekcji przy użyciu 2-rdzeniowego systemu stacjonarnego z 2 GB pamięci RAM.
- Największa znana instalacja wykorzystująca Sphinx, Boardreader.com, indeksuje 16 miliardów dokumentów.
- Najbardziej ruchliwa znana instalacja, Craigslist, obsługuje ponad 300 000 000 zapytań dziennie i ponad 50 miliardów odsłon miesięcznie.
Zobacz też
Dalsza lektura
- Aksjonow, Andrzej (2011). Wprowadzenie do wyszukiwania za pomocą Sphinx: od instalacji do dostrajania trafności . Media O'Reilly. ISBN 978-0-596-80955-3 .
- Ali, Abbas (2011). Przewodnik dla początkujących Sphinx Search . Birmingham, Anglia: Packt Publishing. ISBN 978-1-84951-254-1 .
- Nigdy więcej open source (2017) https://sphinxsearch.com/blog/2017/07/24/sphinx-2017/