4. Почему
● быстрый
● open source
● не требует дополнительного ПО
● специально снабжён возможностью
хорошего взаимодействия с базами
данных SQL
● SphinxQL
5. Немного статистики
~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
6. Возможности
● высокая скорость индексации (до 10 MB/сек на
современных процессорах)
● высокая скорость поиска (средний запрос
обрабатывается менее 0.1 секунды на 2-4 GB
текстовых коллекциях)
● обеспечивает хорошую релевантность путем
сочетания ранжирования похожих фраз и статистики
ранжирования
● поддержка одновременно нескольких
дополнительных атрибутов для каждого документа
(группы, временные метки и т.д.)
9. и что дальше?
Sphinx состоит из трех компонентов: генератор
индекса, поисковая система и поисковая утилита,
работающая в командной строке:
● Генератор индекса (indexer). Он выполняет запросы к базе данных,
индексирует каждую колонку в каждой строке результата и
привязывает каждую запись индекса к первичному ключу строки.
● Поисковая система представляет собой демон, который называется
searchd.
● Удобная утилита search позволяет выполнять поиск из командной
строки без написания кода.
15. оно работает?
$ sudo /usr/local/bin/indexer --rotate --all
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'Post'...
collected 8 docs, 0.0 MB
sorted 0.0 Mhits, 82.8% done
total 8 docs, 149 bytes
total 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
16. 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')
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'), простой и быстрый, считает кол-во
совпадений