01 Ноя 2010

Поиск в XenForo: MySQL FullText VS Sphinx, преимущества и недостатки

Category: XenForo,СтатьиFractalizeR @ 12:23

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

Плюсы Sphinx

  • Возможность активации морфологического поиска (то есть, как бы человек не искал «форум», «форума», «форумов» и в каком бы виде поисковое слово не было упомянуто в посте, Sphinx покажет его в результатах поиска).
  • Возможность использования расширенного синтаксиса запросов (которым 99% клиентов пользоваться не будут)
  • Высокая скорость поиска
  • Минимальная нагрузка на сервер
  • Размер индекса примерно в два раза меньше, чем у MySQL FullText (со стандартными настройками)
  • Простая поддержка произвольных разделителей в качестве границы слова. Например, на своем форуме мне нужно было, чтобы поиск считал дефисы и подчеркивания частью слова. MySQL придется пересобрать для активации такой поддержки.

Минусы Sphinx

  • Отложенная индексация. Содержимое только что написанного поста становится доступным в поиске не сразу, а только после запуска дельта-индексирования. Обычно, его запускают по планировщику каждые 10 минут. Часто запускать тоже не стоит, поскольку это сильно фрагментирует и раздувает индекс. В Sphinx 1.10 появилась возможность RealTime индексирования, но пока расширениями XF она не поддерживается. Финала 1.10 еще нет (только Beta), да и RT индексы имеют свои ограничения.
  • Необходимость полной реиндексации. Примерно раз в сутки индекс нужно перестраивать полностью, поскольку дельта-индексы не обладают требуемой производительностью для постоянного использования. Правда, сервер это нагружает не сильно.
  • Несоразмерные затраты на поиск по маске (типа «сообще*» или «*анная»). Это сильно раздувает индекс, поскольку при индексировании слова «пример» для обеспечения такого поиска в индекс будут включены все варианты, которые требуются для обеспечения поиска по маске (при, прим, приме, пример, ример, имер, мер, в случае, если в настройках указана минимальная длина префикса и суффикса — 3). Раздувание индекса приводит к замедлению поиска и индексирования.
  • Невозможность поиска по маске в середине строки «сооб*ие»
  • Операции индексации все равно немного нагружают MySQL для извлечения информации, по которой строится индекс. Хотя, этим можно пренебречь, если аддон поиска нормально написан.

Ответить

Для отправки комментария вам нужно зарегистрироваться. Войти.