SphinxSearch

30
SphinxSearch (0.9.9) wydajny oraz prosty do wdrożenia silnik wyszukiwania pełnotekstowego 3CAMP#25 – UX SEARCH – 30.03 – 18 :00

description

prezentacja na 3CAMP#25 – UX SEARCH – 30.03 – 18:00

Transcript of SphinxSearch

Page 1: SphinxSearch

SphinxSearch (0.9.9)

wydajny oraz prosty do wdrożenia silnik wyszukiwania

pełnotekstowego

3CAMP#25 – UX SEARCH – 30.03 – 18:00

Page 2: SphinxSearch

            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

Page 3: SphinxSearch

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

Page 4: SphinxSearch

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

Page 5: SphinxSearch

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)

Page 6: SphinxSearch

 

FACETING

SEARCH

czym jest Search?

Page 7: SphinxSearch

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);

Page 8: SphinxSearch

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

Page 9: SphinxSearch

SphinxSearch + Rails

Page 10: SphinxSearch

SphinxSearch + Rails

powyższe metody zwracają kolekcje tak jak metoda find

Page 11: SphinxSearch

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}

Page 12: SphinxSearch

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}

Page 13: SphinxSearch

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}

Page 14: SphinxSearch

Sphinx - konfiguracja

Indeksowanie

:~$ /usr/local/bin/indexer --config nokaut.conf

Uruchomienie daemona

:~$ /usr/local/bin/searchd --config nokaut.conf

Page 15: SphinxSearch

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)

Page 16: SphinxSearch

High availability

RSYNC na 4 serwery1 SPARE

aplikacja sama losuje serwer

Page 17: SphinxSearch

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/

Page 18: SphinxSearch

Wydajność

index: 17GB, ~12M dokumentów

budowanie indexu 7GB, 5M dokumentów trwa 840s

8,5MB/s5952 dokumentów/s

Wyszukiwanie

~160 zapytań/s

Page 19: SphinxSearch

Wydajność

index: 17GB, ~12M dokumentów

Page 20: SphinxSearch

Wydajność

index: 17GB, ~12M dokumentów

Page 21: SphinxSearch

Wydajność

index: 17GB, ~12M dokumentów

Page 22: SphinxSearch

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

Page 23: SphinxSearch

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

Page 24: SphinxSearch

Usability

ilość inputów na stronie - 1 search wystarczy, 2gi nie poprawi jakości wyników ;-)

Page 25: SphinxSearch

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

Page 26: SphinxSearch

Autosugestia

Page 27: SphinxSearch

Autosugestia

zła autosugestia - bounce-rate rośnie

Page 28: SphinxSearch

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!

Page 29: SphinxSearch

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, ..., ... ?

Page 30: SphinxSearch

Dziękuję

czytajcie wasze search logi!

http://www.slideshare.net/lowang/sphinxsearchhttp://kariera.grupanokaut.pl/