поиск с комбинацией структурированных критериев и произвольного ключевого слова / фразы - NOSQL vs Lucene / Sphinx

у нас есть приложение eMall, основанное в основном на главной таблице MySQL ~ 500 тыс. строк (с подробными таблицами, в которых хранятся поля, недоступные для поиска, и другие связанные таблицы с информацией о магазине и т. д.).

Сегодня пользователи могут выполнять поиск на основе конкретных структурированных данных о продуктах (например, бренда, категории, цены, конкретного магазина и т. Д.).

Мы также хотели бы поддерживать поиск по ключевым словам в сочетании со структурированными данными.

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

Lucene, Sphinx и т. Д. Для индексации всех продуктов? База данных NoSQL (mongo, couch и т. Д.), Используемая в качестве промежуточного уровня кеширования перед MySQL? База данных NOSQL для замены MySQL?

Комбинация вышеперечисленного?

В случае Lucene и Sphinx - насколько они гибки с точки зрения комбинирования структурированных критериев? Или нам нужно сначала запустить текстовый поиск, а затем отфильтровать результаты вторым структурированным запросом на mySQL?

Любые намеки или уловки, извлеченные из вашего собственного опыта, будут более чем приветствоваться!

заранее спасибо


person webgr    schedule 20.09.2010    source источник


Ответы (2)


Я использовал Sphinx для полнотекстового поиска, подобного вашим требованиям (поиск на основе произвольного текста и структурированных атрибутов), с несколькими ГБ данных и 5 млн строк в MySQL. Очень доволен производительностью и надежностью (ни единого простоя).

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

person tszming    schedule 23.09.2010

Я предлагаю вам использовать Solr - он включает поиск по ключевым словам на основе Lucene. Вы можете использовать фасеты и фильтры для структурированных данных о товарах. Кажется, что с размером 500 тыс. Элементов Solr довольно легко справится. Ее можно рассматривать как базу данных NoSQL, и ее проще использовать, чем чистый Lucene. Вы можете ознакомиться с соответствующими соображениями в Сравнение системы полнотекстового поиска и СУБД.

person Yuval F    schedule 20.09.2010
comment
См. Эту ссылку, чтобы узнать больше о возможностях solr - ibm.com/developerworks/ java / library / j-solr1 и язык запросов lucene: lucene.apache. org / java / 3_0_2 / queryparsersyntax.html - person Skarab; 22.09.2010
comment
+1 для Solr. Вы можете сделать все, что хотите, а потом еще немного. Мое единственное предложение - свести количество движущихся частей к минимуму. Просто не добавляйте Nosql-ish, потому что они есть. FWIW Solr должно хватить. - person Mikos; 23.09.2010
comment
Большое спасибо за ваш ответ. Думаю, нам придется поэкспериментировать с Solr и Sphinx. Сначала мы попробуем Sphinx, поскольку кажется, что его проще интегрировать с тем, что у нас уже есть, но Solr также может быть подходящим решением. - person webgr; 28.09.2010