Изменения

Перейти к: навигация, поиск

Сравнение движков полнотекстового поиска

224 байта добавлено, 18:01, 31 октября 2012
м
MySQL fulltext (5.5)
* Индексы можно создавать только на полях MyISAM-таблиц.
* Размер индекса — индекса — примерно половина от размера данных. Правда, нужно иметь ввиду, что отключить сохранение самих текстов вы не можете, поэтому к этим 50 50 % нужно добавить ещё 100 100 % — данные-то хранятся.* Скорость индексации — индексации — в чистом виде приличная, примерно 1.5 МБ/с. Понятно, что ещё нужно прогонять через стеммер. Если наполнять индекс, на ходу вытаскивая данные из той же базы, и прогоняя через Perl-порт русского Snowball-стеммера — стеммера — получается 314 КБ/с.На самом деле в MySQL есть архитектура для подключения стеммеров плагинами («fulltext parser plugins»), вот только самих плагинов как-то нет… :)
* Встроенного стеммера нет, стоп-слова вшиты английские, свои добавить нельзя. По умолчанию булев поиск идёт по «ИЛИ», поэтому для поиска по «И» нужно каждое слово превращать в «+слово».
* Есть два режима — режима — булев и обычный («natural language») поиск. Булев поиск просто проверяет, есть ли слова в документе и поддерживает логические операции, фразы и префиксный поиск, но не возвращает оценку релевантности (только 0 или 1). Обычный поиск умеет релевантность, но не умеет операторы. Поэтому, чтобы поддерживать и то, и другое — другое — нужно дёргать один и тот же запрос в двух режимах.
** Префиксный поиск в MySQL '''феерически''' медленный. На нескольких словах, развёрнутых в префиксы, легко может получиться и 15, и 40 секунд. Так что его не нужно использовать вообще.
* По нескольким полям одновременно искать не умеет — умеет — то есть, синтаксис-то такой [http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_match MATCH()] позволяет, но никакой оптимизации поиска при этом не происходит, а происходит фулскан. Поэтому лучше писать <tt>(select id where match(field1) ...) UNION (select id where match(field2) ...)</tt>.
* Скорость поиска, по запросам, взятым из заголовков случайных багов, с лимитом количества найденного 1000:
** В 5 потоков на 3 словах — словах — в среднем 175 мс, максимум 3.46 сек.** В 5 потоков на 3 словах, первые 10 результатов — результатов — так же.** В 5 потоков на 2 словах — словах — в среднем 210 мс, максимум 3.1 сек.** В 1 поток на 3 словах — словах — в среднем 63 мс, максимум 764 мс.
** Зависит в основном от количества найденного.
* Основное достоинство — достоинство — наличие поиска «искаропки».
== [http://sphinxsearch.com Sphinx] (2.0.1-beta) ==

Навигация