SphinxSearch

1,108 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,108
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SphinxSearch

  1. 1. SphinxSearch (0.9.9) wydajny oraz prosty do wdrożenia silnik wyszukiwania pełnotekstowego 3CAMP#25 – UX SEARCH – 30.03 – 18:00
  2. 2.              O mnie <ul><li>- it od 2002r </li></ul><ul><li>- wyszukiwarki od 2008r - Morizon.pl (SphinxSearch) </li></ul><ul><li>- od 2009r Nokaut.pl (SphinxSearch) </li></ul><ul><li>http://pl.linkedin.com/in/przemekwroblewski </li></ul><ul><li>Dziękuję Wiktorowi Mazurowi (Nokaut.pl) za pomoc przy tej prezentacji :-) </li></ul><ul><li>http://www.linkedin.com/in/wiktormazur </li></ul>
  3. 3. Wyszukiwanie - uproszczona zasada działania <ul><li>BAZA : 1: Notebook SAMSUNG SF510 2: Notebook SONY Vaio Z 3. Notebook ASUS K52F </li></ul><ul><li>FULLTEXT : </li></ul><ul><li>Notebook: [1,2,3] </li></ul><ul><li>SAMSUNG: [1] </li></ul><ul><li>SF510: [1] </li></ul><ul><li>SONY: [2] </li></ul><ul><li>Vaio: [2] </li></ul><ul><li>Z: [2] </li></ul><ul><li>ASUS: [3] </li></ul><ul><li>K52F: [3] </li></ul>odwrotnie niż w bazie danych - inverted index
  4. 4. Wyszukiwanie -  uproszczona zasada działania <ul><li>wyszukiwanie dokumentu zawierającego wszystkie frazy -wyszukiwanie z &quot;AND&quot; </li></ul><ul><li>zapytanie :  Notebook SAMSUNG </li></ul><ul><li>wynik to przecięcie się zbiorów: </li></ul><ul><li>Notebook: [1,2,3] </li></ul><ul><li>SAMSUNG: [1] </li></ul><ul><li>czyli dokument #1 </li></ul>
  5. 5. Wyszukiwanie -  uproszczona zasada działania <ul><li>wyszukiwanie dokumentu zawierającego wszystkie frazy -wyszukiwanie z &quot;OR&quot; </li></ul><ul><li>zapytanie: Notebook SAMSUNG </li></ul><ul><li>wynik posortowany wg dokumentów z największą ilością przecięć zbiorów (Relevance): </li></ul><ul><li>Notebook: [1,2,3] </li></ul><ul><li>SAMSUNG: [1] </li></ul><ul><li>czyli dokument #1 (2) a następnie #2 (1), #3 (1) </li></ul>
  6. 6.   FACETING SEARCH czym jest Search?
  7. 7. MySQL FullTextSearch <ul><li>- 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 product WHERE MATCH (title) AGAINST ('notebook AND samsung' IN BOOLEAN MODE); </li></ul>
  8. 8. SphinxSearch <ul><li>- zastosowany latem 2007r  </li></ul><ul><li>- działa do dziś </li></ul><ul><li>wystąpiły 2 problemy przez 4 lata: </li></ul><ul><li>- 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ę </li></ul><ul><li>- długie czasy odpowiedzi gdy działał na serwerze www, przeniesienie na osobne serwery zlikwidowało problem </li></ul>
  9. 9. SphinxSearch + Rails
  10. 10. SphinxSearch + Rails powyższe metody zwracają kolekcje tak jak metoda find
  11. 11. Sphinx - konfiguracja <ul><li># SOURCES </li></ul><ul><li>source src_category </li></ul><ul><li>{ </li></ul><ul><li>     type                = mysql </li></ul><ul><li>     sql_host            = 127.0.0.1 </li></ul><ul><li>     sql_user            = sphinx </li></ul><ul><li>     sql_pass            = sphinx </li></ul><ul><li>     sql_db              = production </li></ul><ul><li>     sql_port            = 3306 </li></ul><ul><li>     sql_query_pre       = SET NAMES UTF8 </li></ul><ul><li>     sql_query_range     = SELECT MIN(id), MAX(id) FROM category </li></ul><ul><li>     sql_range_step      = 1000 </li></ul><ul><li>     sql_query           = SELECT id, title </li></ul><ul><li>                           FROM category </li></ul><ul><li>                           WHERE id >= $start AND id <= $end </li></ul><ul><li>     sql_query_info      = SELECT * FROM category WHERE id=$id </li></ul><ul><li>} </li></ul>
  12. 12. Sphinx - konfiguracja <ul><li># INDEXES </li></ul><ul><li>index category </li></ul><ul><li>{ </li></ul><ul><li>     source              = src_category </li></ul><ul><li>     path                = /home/sphinx/category </li></ul><ul><li>     docinfo             = extern </li></ul><ul><li>     morphology          = none </li></ul><ul><li>     stopwords           = </li></ul><ul><li>     min_word_len        = 2 </li></ul><ul><li>     charset_type        = utf-8 </li></ul><ul><li>     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 </li></ul><ul><li>     min_prefix_len      = 2 </li></ul><ul><li>     min_infix_len       = 0 </li></ul><ul><li>     enable_star         = 1 </li></ul><ul><li>     html_strip          = </li></ul><ul><li>     html_index_attrs    = 1 </li></ul><ul><li>} </li></ul>
  13. 13. Sphinx - konfiguracja <ul><li># </li></ul><ul><li># SEARCHER CONFIG </li></ul><ul><li># </li></ul><ul><li>searchd </li></ul><ul><li>{ </li></ul><ul><li>     address             = 0.0.0.0 </li></ul><ul><li>     port                = 3312 </li></ul><ul><li>     listen              = localhost:9306:mysql41 </li></ul><ul><li>     read_timeout        = 5 </li></ul><ul><li>     max_children        = 30 </li></ul><ul><li>     pid_file            = /var/run/sphinx/searchd.pid </li></ul><ul><li>     max_matches         = 4000 </li></ul><ul><li>     #log                = /var/log/searchd.log </li></ul><ul><li>     #query_log          = /var/log/query.log </li></ul><ul><li>} </li></ul>
  14. 14. Sphinx - konfiguracja <ul><li>Indeksowanie </li></ul><ul><li>:~$ /usr/local/bin/indexer --config nokaut.conf </li></ul><ul><li>Uruchomienie daemona :~$ /usr/local/bin/searchd --config nokaut.conf </li></ul>
  15. 15. Wyszukiwanie - sphinx API <ul><li>:~$ mysql -h127.0.0.1 -P9306 </li></ul><ul><li>Welcome to the MySQL monitor.  Commands end with ; or g. </li></ul><ul><li>Your MySQL connection id is 1 </li></ul><ul><li>Server version: 0.9.9-id64-release (r2117) </li></ul><ul><li>mysql> select * from nokaut_category where MATCH('zmywarki'); </li></ul><ul><li>+------+--------+ </li></ul><ul><li>| id   | weight | </li></ul><ul><li>+------+--------+ </li></ul><ul><li>| 1523 |   1698 |  ( Zmywarki do zabudowy ) </li></ul><ul><li>| 5815 |   1698 |  ( Zmywarki ) </li></ul><ul><li>| 8992 |   1698 |  ( Zmywarki gastronomiczne ) </li></ul><ul><li>+------+--------+ </li></ul><ul><li>3 rows in set (0,02 sec) </li></ul>
  16. 16. High availability <ul><li>RSYNC na 4 serwery </li></ul><ul><li>1 SPARE </li></ul><ul><li>aplikacja sama losuje serwer </li></ul>
  17. 17. Wydajność <ul><li>&quot;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. </li></ul><ul><li>And last but not least, it's open-sourced under GPLv2, and the community edition is free to use. </li></ul><ul><li>Performance and scalability </li></ul><ul><ul><li>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). </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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.&quot; </li></ul></ul>--  http://sphinxsearch.com/about/sphinx/
  18. 18. Wydajność index: 17GB, ~12M dokumentów budowanie indexu 7GB,  5M dokumentów trwa 840s 8,5MB/s 5952 dokumentów/s Wyszukiwanie ~160 zapytań/s
  19. 19. Wydajność index: 17GB, ~12M dokumentów
  20. 20. Wydajność index: 17GB, ~12M dokumentów
  21. 21. Wydajność index: 17GB, ~12M dokumentów
  22. 22. Usability <ul><li>wg badań użyteczności search był ostatnią próbą znalezienia w serwisie dla użytkownikow nawigujących w serwisie: </li></ul><ul><li>  </li></ul><ul><ul><li>pasek rozrzadu citroen xsara picasso </li></ul></ul><ul><ul><li>clatronic odkurzacz </li></ul></ul><ul><ul><li>duza lalka arielka 95cm wysokosci </li></ul></ul><ul><ul><li>telewizor lg 40 cali </li></ul></ul><ul><ul><li>damska torba na laptop 15,6 </li></ul></ul><ul><ul><li>telewizor samsung lcd 50 </li></ul></ul><ul><ul><li>nozyce do kabli NAJTAŃSZE </li></ul></ul><ul><li>  </li></ul><ul><li>kategoria producent model cecha </li></ul>
  23. 23. Usability <ul><li>Search jako zaawansowany filtr </li></ul><ul><li>- w kategorii Opony częsta fraza wyszukiwania to &quot;zimowe&quot; </li></ul><ul><li>- przyzwyczajenia z allegro są przenoszone w inne miejsca </li></ul><ul><li>Jakość danych wpływa na bounce rate, obrazuje się jako wyłowienie cech z searcha </li></ul>
  24. 24. Usability <ul><li>ilość inputów na stronie - 1 search wystarczy,  </li></ul><ul><li>2gi nie poprawi jakości wyników ;-) </li></ul>
  25. 25. Usability <ul><li>www.nokaut.pl/szukaj/czajniki </li></ul><ul><li>  </li></ul><ul><li>poprawne działanie dla użytkownika: </li></ul><ul><ul><li>wyswietlić filtry dla kategorii czajników </li></ul></ul><ul><ul><li>ignorujemy wyniki z słowem czajnik, </li></ul></ul><ul><ul><li>pokazujemy wyniki dla kategorii </li></ul></ul><ul><li>  </li></ul><ul><li>filtry:  </li></ul><ul><li>  </li></ul><ul><ul><li>kategoria (gazowe,elektryczne)  </li></ul></ul><ul><ul><li>producent, </li></ul></ul><ul><ul><li>wspolny filtr: kolorystyka,  </li></ul></ul><ul><ul><li>objętość dla czajników elektryczny i gazowy </li></ul></ul>
  26. 26. Autosugestia
  27. 27. Autosugestia zła autosugestia - bounce-rate rośnie
  28. 28. Wyszukiwanie w liczbach <ul><li>20% odsłon na stronie search (3M wejść) </li></ul><ul><li>5% użytkowników świadomie korzysta z searcha </li></ul><ul><li>średnio 1 UU korzysta 2x z searcha </li></ul><ul><li>  </li></ul><ul><li>Lepszy kontent + funkcjonalność </li></ul><ul><li>do 2giej głębokości strony po searchu dociera ~40% użytkowników </li></ul><ul><li>lepszy wynik (jakość wyszukiwania!, filtrowanie wyników) zmniejszy bounce rate </li></ul><ul><li>  </li></ul><ul><li>  </li></ul><ul><li>  </li></ul><ul><li>  </li></ul><ul><li>  </li></ul><ul><li>  </li></ul><ul><li>koło 400k użyć przez urzytkownikow  </li></ul><ul><li>200k UU / 4,2M UU korzysta z searcha </li></ul><ul><li>3M wejsc na strone searcha </li></ul><ul><li>searcha/miesiąc </li></ul><ul><li>odsłon 14,5M </li></ul><ul><li>ile % userów korzysta z searcha: </li></ul><ul><li>4,2M UU </li></ul><ul><li>Podpowiadanie </li></ul><ul><li>FAIL: </li></ul><ul><li>skapiec: ipo (ruch myszka) + enter </li></ul><ul><li>przekierowuje na produkt z listy </li></ul><ul><li>bounce-rate rośnie </li></ul><ul><li>Ruch </li></ul><ul><li>sitemapa - linki do wyszukiwania </li></ul><ul><li>dodatkowo linki do wyszukiwania uzytkownikow (crosslinki, uzytkownicy wyszukiwali takze...) </li></ul><ul><li>Lepszy kontent + funkcjonalność </li></ul><ul><li>część ruchu wchodzi na strone searcha: </li></ul><ul><li>wykres zależność page depth od ilości użytkownikow </li></ul><ul><li>do 2giej strony dociera ~40% - lepszy wynik mniejszy bounce rate (jakość wyszukiwania!, filtrowanie wyników) </li></ul><ul><li>konwersja - tajne, nie powiem! </li></ul>
  29. 29. Trafne wyniki przy błędnych zapytaniach <ul><li>Podstawy </li></ul><ul><ul><li>wielkość liter </li></ul></ul><ul><ul><li>polskie znaki </li></ul></ul><ul><li>  </li></ul>Z archiwum searchlog-a: 1. lodowko zamrazarka wysokość175cm 2. SKRZYNIA BIEGÓW mercedes a klasa 3. expres dokawy 4. sharp 42 wd1 5. dlla150s417 (wtryskiwacz) 6. dvd dirty dancing cichopek i hakile 7. clinique 3 kroki do cey miesznej <ul><li>Inne techniki </li></ul><ul><ul><li>łączenie wyrazów </li></ul></ul><ul><ul><li>tokenizacja liczb i cyfr </li></ul></ul><ul><ul><li>levenstein, ..., ... ? </li></ul></ul>
  30. 30. Dziękuję czytajcie wasze search logi! http://kariera.grupanokaut.pl/

×