Your SlideShare is downloading. ×

Sphinx search

1,724

Published on

fulltext search with Sphinx basics

fulltext search with Sphinx basics

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,724
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Использование Sphinx для полнотекстового поиска.
  • 2. Полнотекстовый? Полнотекстовый поиск — поиск документа в базе текстов на основании содержимого этих документов
  • 3. Как оно работает?
  • 4. Почему● быстрый● open source● не требует дополнительного ПО● специально снабжён возможностью хорошего взаимодействия с базами данных SQL● SphinxQL
  • 5. Немного статистики~3.5 миллиона записей, ~5 GB текста(из Wikipedia) MySQL Lucene SphinxИндексация, min 1627 176 84Индекс, MB 3011 6328 2850Match all, ms/q 286 30 22Match phrase, ms/q 3692 29 21Match bool top-20, ms/q 24 29 13
  • 6. Возможности ● высокая скорость индексации (до 10 MB/сек на современных процессорах) ● высокая скорость поиска (средний запрос обрабатывается менее 0.1 секунды на 2-4 GB текстовых коллекциях) ● обеспечивает хорошую релевантность путем сочетания ранжирования похожих фраз и статистики ранжирования ● поддержка одновременно нескольких дополнительных атрибутов для каждого документа (группы, временные метки и т.д.)
  • 7. Недостатки● “монолитные” индексы● отсутствие документации на русском
  • 8. Установка (*nix)1. Распаковать2. $ ./configure3. $ make4. $ make install
  • 9. и что дальше?Sphinx состоит из трех компонентов: генераториндекса, поисковая система и поисковая утилита,работающая в командной строке:● Генератор индекса (indexer). Он выполняет запросы к базе данных, индексирует каждую колонку в каждой строке результата и привязывает каждую запись индекса к первичному ключу строки.● Поисковая система представляет собой демон, который называется searchd.● Удобная утилита search позволяет выполнять поиск из командной строки без написания кода.
  • 10. Настройка /usr/local/etc/sphinx.conf● источники (source)● индексы (index)● конфиг демона (searchd)
  • 11. Немного практики
  • 12. sourcesource Post{ type = mysql sql_host = localhost sql_user = sphinx sql_pass = whyd0in33d1t sql_db = zomg_test_forum sql_sock = /tmp/mysql/mysql.sock sql_port = 3306 sql_query = SELECT id, userId, threadId, title, text FROM Posts; sql_query_info = SELECT * FROM Posts WHERE id=$id sql_query_range = SELECT MIN(id), MAX(id) FROM Posts sql_range_step = 500 sql_query_pre = SET NAMES utf8 sql_field_string = text sql_attr_multi = uint tags from query;SELECT id FROM Tags}
  • 13. index index Post {index Thread type = rt{ path = /mnt/data/Post type = rt rt_field = title path = /mnt/data/Thread rt_field = text rt_field = title rt_attr_string = _title rt_attr_string = _title rt_attr_string = _text rt_attr_uint = userId rt_attr_uint = threadId morphology = stem_enru rt_attr_uint = userId} rt_attr_multi = tags morphology = stem_enru }
  • 14. searchdsearchd{ listen = localhost:3307:mysql41 port = 3312 log = /etc/sphinx/searchd.log query_log = /etc/sphinx/query.log pid_file = /etc/sphinx/searchd.pid}
  • 15. оно работает?$ sudo /usr/local/bin/indexer --rotate --allusing config file /usr/local/etc/sphinx.conf...indexing index Post...collected 8 docs, 0.0 MBsorted 0.0 Mhits, 82.8% donetotal 8 docs, 149 bytestotal 0.010 sec, 14900.00 bytes/sec, 800.00 docs/sec$ /usr/local/bin/search windindex Post: query wind : returned 2 matches of 2 total in 0.000 sec
  • 16. SphinxQL1) SELECT * FROM Thread LIMIT 1,22) SELECT * FROM Post WHERE threadId = 13) SELECT * FROM Post WHERE match(art) ORDER BY@weight DESC4) SELECT _title FROM Post WHERE match(@title art)5) SELECT * FROM Post WHERE tags in (1,2) AND match(google)
  • 17. Ранжирование (ranker) SELECT * FROM test WHERE MATCH(@title hello @body world) OPTION ranker=bm25, max_matches=3000, field_weights=(title=10, body=3) ● SPH_RANK_PROXIMITY_BM25 (proximity_bm25), режим по умолчанию - учитывается близость слов и ранжирование BM25 ● SPH_RANK_BM25 (bm25), только BM25, как в большинстве других поисковых систем (быстрее 1го режима) ● SPH_RANK_NONE (none), вообще без ранжирования - самый быстрый режим ● SPH_RANK_WORDCOUNT (wordcount), простой и быстрый, считает кол-во совпадений
  • 18. Ура?1. Установили Sphinx2. Настроили3. ....4. profit?

×