Поиск коротких полей с использованием Solr и т. Д. Или использование прямого индекса БД

0

Мой сайт хранит несколько миллионов объектов. Посетители ищут объекты, введя слова, содержащиеся только в заголовках. Заголовки длиной не более 100 символов.

Это не случай классического поиска документов, где пользователи ищут внутри больших капель. Поля очень короткие. Кроме того, главная проблема здесь - производительность (и не релевантность), поскольку объекты предоставляются "по мере ввода" (автоматически предлагается).

Каким будет более разумный маршрут?

  • Создайте таблицу MySql [word, entity_id], проиндексируйте "слово", а затем выполните запрос, используя
    выберите entity_id из search_index, где слово типа "[query_word]%
    Это, очевидно, требует от меня разбить каждый заголовок на его слова и добавить строку для каждого слова.
  • Используйте Solr или аналогичную поисковую систему, которая из моего чтения больше ориентирована на полнотекстовый поиск.

Кроме того, как это повлияет на меня, если я захочу ввести предложения о правописании в будущем.

Спасибо!

Теги:
search
solr
full-text-search
xapian

1 ответ

0
Лучший ответ

Pro для решения только для базы данных:

  • Меньше настроек и обслуживания (у вас уже есть база данных)
  • Если вы хотите ПРИСОЕДИНИТЬСЯ к своим результатам поиска с другими данными или иным образом манипулировать ими, вы сможете сделать это изначально в базе данных
  • Не будет временной задержки (если вы периодически синхронизируете Solr с вашей базой данных) или процедуры обслуживания (если вы решите добавить/обновить записи в Solr в режиме реального времени везде, где вы вставляете их в базу данных)

Pro решения Solr:

  • Производительность: Solr обрабатывает кеширование и быстро выходит из коробки
  • Проверка орфографии - если вы планируете использовать тип проверки орфографии, Solr обрабатывает это изначально
  • Настройка и настройка Solr не очень болезненна, хотя это помогает, если вы знакомы с серверами приложений Java.
  • Хотя у вас есть простые требования, я думаю, что вы пытаетесь найти какую-то логику в поиске слов; Солр делает это очень хорошо.

Вы также можете рассмотреть будущие требования (что, если ваши документы имеют больше, чем просто поле заголовка, и вы хотите присвоить какую-то релевантность? Что, если вы решите разрешить людям искать основной текст этих объектов и/или вы хотите индексировать другие типы документов, такие как MS Word? Что делать, если вы хотите получить результаты фасетного поиска? Solr хорош во всех этих случаях.

Я не уверен, что вам нужно будет создать запись для каждого слова в вашей базе данных, а просто "% [query_word]%", если вы собираетесь создавать записи с каждым словом в любом случае. Может быть проще просто перейти с базой данных для начинающих, так как требования кажутся довольно простыми. Должно быть достаточно просто масштабировать производительность базы данных.

Я могу сказать, что мы используем Solr на сайте, и нам нравится производительность, и мы используем его даже для очень простых поисков. Однако одна вещь, которую нам не хватает, - это способ комбинирования данных Solr с данными базы данных. И есть дополнительное обслуживание. В конце дня нелегко ответить.

  • 0
    Спасибо за подробный ответ! Существует проблема с использованием% с обеих сторон, потому что индекс используется только в том случае, если известен самый левый префикс. Я думаю, что вы очень правы с вашей точкой зрения относительно будущих требований (например, проверка орфографии). Думаю, тогда я попробую Solr :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню