Задать вопрос

Полнотекстовый поиск MySql или Sphinx?

У меня очень много данных в Mysql(~100GB) и MongoDb(~50GB). Необходимо быстро по ним искать, используя полнотекстовый поиск.
На данный момент для этого я использую Sphinx. Но последние версии Mysql поддерживают полнотекстовый поиск. Вот думаю перегнать все данные в Mysql и отказаться от Mongodb и Sphinx.
Кто что думает по этому поводу? Существенно ли я проиграю в скорости поиска? Стоит ли так делать?
  • Вопрос задан
  • 4197 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
@abroabr
Полнотекстовый поиск устроен достаточно примитивно.
У всех. Разница только в нюансах.

1. Делится текст на отдельные слова, отбрасываются короткие и служебные слова.
2. Прогоняются слова через стемминг (отсекаются окончания) snowball.tartarus.org/algorithms/russian/stemmer.html
3. По словам строится индекс что-то типа такого roaringbitmap.org

Все - MySQL, PostgreSQL, SphinxSeach, ManticoreSearch, ElasticSearch - работают по такому алгоритму, когда речь идет о полнотекстовом поиске.

Качество поиска упирается в основном в п. 1 и 2. Плюс ручная заточка (дополнительный словарь и пр.)
Скорость поиска упирается в п. 3.

Есть небольшие отличия. Например, ElasticSearch умеет работать с индексом, который хранится на кластере из нескольких серверов. Таким образом, он не ограничен в размере индекса так жестко как SphixSearch (где принципиально, чтобы данные располагались на одном сервере).

С другой стороны - SphinxSearch и его форк ManticoreSearch - чрезвычайно заточены на скорость. В частности, в них принята парадигма - игнорировать ошибки при построении индекса настолько настолько это возможно. Все ради скорости.

MySQL и PostgreSQL - не имеют никаких преимуществ ни по скорости (как Sphinx/Manticore) ни по объему индекса (как ElasticSearch). Их преимущества - простота использования, если у вас данные изначально хранятся в реляционной СУБД.

Нет, выхлопа по скорости при переходе на MySQL c Sphinx вы не получите. Sphinx быстрее. От заточен именно на скорость.

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

И да, непонятно зачем вам MongoDB. SphinxSearch уже давно может хранить и сами данные, а не только сам поисковый индекс. Дополнительное обращение к MongoDB после того как документ уже найден в SphinxSearch - снижает производительность. Возможно, MongoDB удобна для каких-то видов работ, например, для инициации построения полнотекстового индекса. Но собственно в процессе полнотекстового поиска - она лишнее звено.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
opium
@opium
Просто люблю качественно работать
Существенно
Не очень понятно зачем вам монгодб
Ответ написан
Комментировать
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Лучше чем отдельный сервер в виде Sphinx или Elasticsearch ничего не придумали еще.

Но последние версии Mysql поддерживают полнотекстовый поиск.

Последние лет за 10? Он там уже плесенью покрыться успел.
"Недавно" только добавили поддержку для InnoDB в 5.6, и это недавно было в 2012 году.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы