Зачем нужна поисковая система Sphinx?

Как работает Sphinx, откуда берет данные, как улучшить релевантность в Sphinx?

P.S. желательно, кто имеем непосредственный опыт работы с этой поисковой системой.

9 симпатий

Sphinx (поисковая машина) — система полнотекстового поиска, разработанная Андреем Аксёновым и распространяемая по лицензии GNU GPL либо, для версий 3.0+ без исходных кодов. wikipedia

За что любят:

  • Высокая скорость индексации (до 10-15 МБ/сек на каждое процессорное ядро);

  • Высокая скорость поиска (до 150—250 запросов в секунду на каждое процессорное ядро с 1 000 000 документов);

  • Высокая масштабируемость;

  • Интеграция с существующими СУБД;

  • Гибкость настроек и т.д.

Где применяется?

  • Википедия
  • Хабрахабр
  • Тысячи других крупных сайтов

Официальный сайт:

http://sphinxsearch.com/

Как установить:

Для сервер Ubuntu, установить Sphinx достаточно просто. Введите:

sudo apt-get install sphinxsearch

Создайте конфиг Sphinx:

sudo nano /etc/sphinxsearch/sphinx.conf

Далее в этом конфиге вам необходимо будет настроить блоки source, index и блок индексации indexer. А так-же блок searchd, который содержит порты и переменные для запуска демона Sphinx.

После того, как будет все настроено, нам необходимо проиндексировать документы (базу) и создать индекс командой:

/path/to/sphinx/bin/indexer --all --verbose

И далее запустить поисковый демон:

searchd --config /path/to/config/sphinx.conf

Коннектимся к демону по SQL протоколу, проверяя его работоспособность:

mysql -h 127.0.0.1 -P 9306

Далее добавляем переиндексацию по крону (раз в сутки):

0  0    * * *   root    /path/to/sphinx/bin/indexer --rotate --all --config /path/to/sphinx/etc/sphinx.conf)

Готово. Количество настроек огромное количество, что позволило в 2011 году выпустить книга “Introduction to Search with Sphinx” издательства O’Reilly, написанная автором поисковика Андреем Аксёновым.

6 симпатий

Зачем нужна поисковая система Sphinx?

Поисковая система Sphinx используется вебмастерами, чтобы сделать поиск по своим сайтам более качественным. Ведь Sphinx предлагает множество возможностей, которых обычно нет в стандартном поисковом механизме.

Sphinx - независимый, отдельный продукт, задачи которого искать. Что он и делает. Он ищет быстро и ищет качественно (в зависимости от настроек).

Но Sphinx не подходит всем. Зачем ставить Sphinx на сайте, где есть всего, например, 10 страниц с текстами? Зачем применять такую махину, для 10 страниц?

3 симпатии

Sphinx — это не поисковая система (как Yandex или Google), а локальный поисковый движок. То есть у него нет поисковых роботов, а есть прямой доступ к базе данных сайта, на котором он работает (или нескольких сайтов, если они на одном сервере). Соответственно, искать он умеет тоже только по этому сайту, а не по всему Интернету, поэтому вопрос о повышении релевантности не особо уместен.

2 симпатии

Мои 5 копеек, или что мне нравится в Sphinx.

То, что я очень сильно могу влиять на выдачу (соотв. или по научному, релевантность), оставляя общую скорость.

Релевантность в информационном поиске — соответствие интента (поискового намерения), заложенного в запросе и выдаче в поисковой системе, полученной в результате этого запроса.

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

Настройка релевантности выдачи важная часть общей настройки Sphinx.

Давайте посмотрим, что можно сделать.

min_prefix_len
min_infix_len
dict
index_exact_words
expand_keywords

min_prefix_len определяет минимальную длину префикса слова для индексации.

dict сохраняет ключевые слова в индексе и позволяет использовать wildcard-символы “*”, ”?” и “%”. Директива имеет всего одно значение:

dict = keywords

expand_keywords и index_exact_words

index_exact_words — в индексе сохраняются слова как они есть.
expand_keywords комбинирует в индексе все сохраненные формы слов, то есть все предыдущие директивы.

Пример использования

index_exact_words 	= 1
expand_keywords		= 1
min_word_len		= 1
min_prefix_len		= 3

При правильной настройке индексации результаты поиска будут максимально релевантными и полными.

Далее, на что следует обратить внимание

Лемматайзер, в отличие от стеммера, использует морфологические словари, поэтому позволяет не просто находить основу слова, а приводить его к нормальной (словарной) форме.

В рамках чего, стоит посмотреть и скачать: Russian morphology dictionary на оф. сайте.

Но я обычно останавливают на:

morphology = stem_enru #Стеммер

Что вполне хватает.

4 симпатии