SphinxSearch
-
Upload
przemyslaw-wroblewski -
Category
Technology
-
view
847 -
download
1
description
Transcript of SphinxSearch
SphinxSearch (0.9.9)
wydajny oraz prosty do wdrożenia silnik wyszukiwania
pełnotekstowego
3CAMP#25 – UX SEARCH – 30.03 – 18:00
O mnie
- it od 2002r- wyszukiwarki od 2008r - Morizon.pl (SphinxSearch)- od 2009r Nokaut.pl (SphinxSearch)
http://linkedin.com/in/przemekwroblewski
Dziękuję Wiktorowi Mazurowi (Nokaut.pl) za pomoc przy tej prezentacji :-)
http://www.linkedin.com/in/wiktormazur
Wyszukiwanie - uproszczona zasada działania
BAZA:1: Notebook SAMSUNG SF5102: Notebook SONY Vaio Z3. Notebook ASUS K52F
FULLTEXT:Notebook: [1,2,3]SAMSUNG: [1]SF510: [1]SONY: [2]Vaio: [2]Z: [2]ASUS: [3]K52F: [3]
odwrotnie niż w bazie danych - inverted index
Wyszukiwanie - uproszczona zasada działaniawyszukiwanie dokumentu zawierającego wszystkie frazy -wyszukiwanie z "AND"
zapytanie: Notebook SAMSUNG
wynik to przecięcie się zbiorów:
Notebook: [1,2,3]SAMSUNG: [1]
czyli dokument #1
Wyszukiwanie - uproszczona zasada działaniawyszukiwanie dokumentu zawierającego wszystkie frazy -wyszukiwanie z "OR"
zapytanie: Notebook SAMSUNG
wynik posortowany wg dokumentów z największą ilością przecięć zbiorów (Relevance):
Notebook: [1,2,3]SAMSUNG: [1]
czyli dokument #1 (2) a następnie #2 (1), #3 (1)
FACETING
SEARCH
czym jest Search?
MySQL FullTextSearch- zastosowane na przełomie 2005/2006r - tylko tabele myisam (singlethreaded)- brak narzutu technologicznego poza istniejący stos (MySQL był od początku) - przy małym ruchu w tamtym czasie rozwiązanie było wystarczające
mysql> CREATE TABLE product ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), FULLTEXT(title)) engine=MyISAM;
mysql> SELECT * FROM productWHERE MATCH (title) AGAINST ('notebook AND samsung' IN BOOLEAN MODE);
SphinxSearch
- zastosowany latem 2007r - działa do dziś
wystąpiły 2 problemy przez 4 lata:- brak obsługi id 64bitowych - sphinx to wspiera ale paczka debianowa miała to wyłączone więc trzeba było zrobić własna paczkę- długie czasy odpowiedzi gdy działał na serwerze www, przeniesienie na osobne serwery zlikwidowało problem
SphinxSearch + Rails
SphinxSearch + Rails
powyższe metody zwracają kolekcje tak jak metoda find
Sphinx - konfiguracja# SOURCESsource src_category{ type = mysql sql_host = 127.0.0.1 sql_user = sphinx sql_pass = sphinx sql_db = production sql_port = 3306
sql_query_pre = SET NAMES UTF8 sql_query_range = SELECT MIN(id), MAX(id) FROM category sql_range_step = 1000 sql_query = SELECT id, title \ FROM category \ WHERE id >= $start AND id <= $end sql_query_info = SELECT * FROM category WHERE id=$id}
Sphinx - konfiguracja# INDEXESindex category{ source = src_category path = /home/sphinx/category docinfo = extern morphology = none stopwords = min_word_len = 2 charset_type = utf-8 charset_table = 0..9, A..Z->a..z, _, a..z, U+0143->U+0144, U+0104->U+0105, U+0106->U+0107, U+0118->U+0119, U+0141->U+0142, U+00D3->U+00F3, U+015A->U+015B, U+0179->U+017A, U+017B->U+017C, U+0105, U+0107, U+0119, U+0142, U+00F3, U+015B, U+017A, U+017C, U+0144 min_prefix_len = 2 min_infix_len = 0 enable_star = 1 html_strip = html_index_attrs = 1}
Sphinx - konfiguracja## SEARCHER CONFIG#searchd{ address = 0.0.0.0 port = 3312 listen = localhost:9306:mysql41 read_timeout = 5 max_children = 30 pid_file = /var/run/sphinx/searchd.pid max_matches = 4000 #log = /var/log/searchd.log #query_log = /var/log/query.log}
Sphinx - konfiguracja
Indeksowanie
:~$ /usr/local/bin/indexer --config nokaut.conf
Uruchomienie daemona
:~$ /usr/local/bin/searchd --config nokaut.conf
Wyszukiwanie - sphinx API:~$ mysql -h127.0.0.1 -P9306Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 0.9.9-id64-release (r2117)
mysql> select * from nokaut_category where MATCH('zmywarki');+------+--------+| id | weight |+------+--------+| 1523 | 1698 | (Zmywarki do zabudowy)| 5815 | 1698 | (Zmywarki)| 8992 | 1698 | (Zmywarki gastronomiczne)+------+--------+3 rows in set (0,02 sec)
High availability
RSYNC na 4 serwery1 SPARE
aplikacja sama losuje serwer
Wydajność"Sphinx clusters scale up to billions of documents and tens of millions search queries per day, powering top websites such as Craigslist, DailyMotion, NetLog, etc.And last but not least, it's open-sourced under GPLv2, and the community edition is free to use.
Performance and scalability• Indexing performance. Sphinx indexes up to 10-15 MB of text per second per single CPU core, that is 60+
MB/sec per server (on a dedicated indexing machine).• Searching performance. Searching through 1,000,000-document, 1.2 GB text collection that we use for
everyday development and testing runs at 500+ queries/sec on a 2-core desktop machine with 2 GB of RAM.• Scalability. Biggest known Sphinx cluster indexes almost 5 billion documents, resulting in over 6 TB of
data. Busiest known one is, unsurpisingly, Craigslist, top-10 website in the US that serves 50+ million search queries/day."
-- http://sphinxsearch.com/about/sphinx/
Wydajność
index: 17GB, ~12M dokumentów
budowanie indexu 7GB, 5M dokumentów trwa 840s
8,5MB/s5952 dokumentów/s
Wyszukiwanie
~160 zapytań/s
Wydajność
index: 17GB, ~12M dokumentów
Wydajność
index: 17GB, ~12M dokumentów
Wydajność
index: 17GB, ~12M dokumentów
Usabilitywg badań użyteczności search był ostatnią próbą znalezienia w serwisie dla użytkownikow nawigujących w serwisie:
1.pasek rozrzadu citroen xsara picasso– clatronic odkurzacz– duza lalka arielka 95cm wysokosci– telewizor lg 40 cali– damska torba na laptop 15,6– telewizor samsung lcd 50– nozyce do kabli NAJTAŃSZE
kategoria producent model cecha
Usability
Search jako zaawansowany filtr
- w kategorii Opony częsta fraza wyszukiwania to "zimowe"- przyzwyczajenia z allegro są przenoszone w inne miejsca
Jakość danych wpływa na bounce rate, obrazuje się jako wyłowienie cech z searcha
Usability
ilość inputów na stronie - 1 search wystarczy, 2gi nie poprawi jakości wyników ;-)
Usabilitywww.nokaut.pl/szukaj/czajniki poprawne działanie dla użytkownika:1. wyswietlić filtry dla kategorii czajników2. ignorujemy wyniki z słowem czajnik,3. pokazujemy wyniki dla kategorii
filtry: 1. kategoria (gazowe,elektryczne) – producent, – wspolny filtr: kolorystyka, – objętość dla czajników elektryczny i gazowy
Autosugestia
Autosugestia
zła autosugestia - bounce-rate rośnie
Wyszukiwanie w liczbach
20% odsłon na stronie search (3M wejść)5% użytkowników świadomie korzysta z searcha
średnio 1 UU korzysta 2x z searcha
Lepszy kontent + funkcjonalność
do 2giej głębokości strony po searchu dociera ~40% użytkowników
lepszy wynik (jakość wyszukiwania!, filtrowanie wyników) zmniejszy bounce rate
koło 400k użyć przez urzytkownikow 200k UU / 4,2M UU korzysta z searcha3M wejsc na strone searchasearcha/miesiącodsłon 14,5M
ile % userów korzysta z searcha:
4,2M UU
Podpowiadanie
FAIL:skapiec: ipo (ruch myszka) + enterprzekierowuje na produkt z listy
bounce-rate rośnie
Ruch
sitemapa - linki do wyszukiwaniadodatkowo linki do wyszukiwania uzytkownikow (crosslinki, uzytkownicy wyszukiwali takze...)
Lepszy kontent + funkcjonalność
część ruchu wchodzi na strone searcha:wykres zależność page depth od ilości użytkownikowdo 2giej strony dociera ~40% - lepszy wynik mniejszy bounce rate (jakość wyszukiwania!, filtrowanie wyników)konwersja - tajne, nie powiem!
Trafne wyniki przy błędnych zapytaniach
Podstawy1. wielkość liter– polskie znaki
Z archiwum searchlog-a:1. lodowko zamrazarka wysokość175cm2. SKRZYNIA BIEGÓW mercedes a klasa3. expres dokawy4. sharp 42 wd1 5. dlla150s417 (wtryskiwacz)6. dvd dirty dancing cichopek i hakile7. clinique 3 kroki do cey miesznej
Inne techniki1. łączenie wyrazów• tokenizacja liczb i cyfr• levenstein, ..., ... ?
Dziękuję
czytajcie wasze search logi!
http://www.slideshare.net/lowang/sphinxsearchhttp://kariera.grupanokaut.pl/