18
Использование Sphinx для полнотекстового поиска.

Sphinx search

Embed Size (px)

DESCRIPTION

fulltext search with Sphinx basics

Citation preview

Page 1: Sphinx search

Использование Sphinx для полнотекстового

поиска.

Page 2: Sphinx search

Полнотекстовый?

Полнотекстовый поиск — поиск документа в базе текстов на основании содержимого этих документов

Page 3: Sphinx search

Как оно работает?

Page 4: Sphinx search

Почему

● быстрый● open source● не требует дополнительного ПО● специально снабжён возможностью

хорошего взаимодействия с базами данных SQL

● SphinxQL

Page 5: Sphinx search

Немного статистики

~3.5 миллиона записей, ~5 GB текста (из Wikipedia) MySQL Lucene Sphinx

Индексация, min 1627 176 84

Индекс, MB 3011 6328 2850

Match all, ms/q 286 30 22

Match phrase, ms/q 3692 29 21

Match bool top-20, ms/q 24 29 13

Page 6: Sphinx search

Возможности

● высокая скорость индексации (до 10 MB/сек на современных процессорах)

● высокая скорость поиска (средний запрос обрабатывается менее 0.1 секунды на 2-4 GB текстовых коллекциях)

● обеспечивает хорошую релевантность путем сочетания ранжирования похожих фраз и статистики ранжирования

● поддержка одновременно нескольких дополнительных атрибутов для каждого документа (группы, временные метки и т.д.)

Page 7: Sphinx search

Недостатки

● “монолитные” индексы● отсутствие документации на русском

Page 8: Sphinx search

Установка (*nix)

1. Распаковать2. $ ./configure3. $ make4. $ make install

Page 9: Sphinx search

и что дальше?

Sphinx состоит из трех компонентов: генератор индекса, поисковая система и поисковая утилита, работающая в командной строке:● Генератор индекса (indexer). Он выполняет запросы к базе данных,

индексирует каждую колонку в каждой строке результата и привязывает каждую запись индекса к первичному ключу строки.

● Поисковая система представляет собой демон, который называется

searchd.

● Удобная утилита search позволяет выполнять поиск из командной строки без написания кода.

Page 10: Sphinx search

Настройка

/usr/local/etc/sphinx.conf ● источники (source)● индексы (index)● конфиг демона (searchd)

Page 11: Sphinx search

Немного практики

Page 12: Sphinx search

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}

Page 13: Sphinx search

index

index Thread{ type = rt path = /mnt/data/Thread rt_field = title rt_attr_string = _title rt_attr_uint = userId

morphology = stem_enru}

index Post{ type = rt path = /mnt/data/Post rt_field = title rt_field = text rt_attr_string = _title rt_attr_string = _text rt_attr_uint = threadId rt_attr_uint = userId rt_attr_multi = tags

morphology = stem_enru}

Page 14: Sphinx search

searchd

searchd{

listen = localhost:3307:mysql41port = 3312log = /etc/sphinx/searchd.logquery_log = /etc/sphinx/query.logpid_file = /etc/sphinx/searchd.pid

}

Page 15: Sphinx search

оно работает?

$ 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 wind index 'Post': query 'wind ': returned 2 matches of 2 total in 0.000 sec

Page 16: Sphinx search

SphinxQL

1) SELECT * FROM Thread LIMIT 1,2 2) SELECT * FROM Post WHERE threadId = 1 3) SELECT * FROM Post WHERE match('art') ORDER BY @weight DESC 4) SELECT _title FROM Post WHERE match('@title art') 5) SELECT * FROM Post WHERE tags in (1,2) AND match('google')

Page 17: Sphinx search

Ранжирование (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'), простой и быстрый, считает кол-во

совпадений

Page 18: Sphinx search

Ура?

1. Установили Sphinx2. Настроили3. ....4. profit?