Поиск коротких полей с использованием Solr и т. Д. Или использование прямого индекса БД - PullRequest
0 голосов
/ 12 сентября 2010

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

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

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

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

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

Спасибо!

1 Ответ

0 голосов
/ 13 сентября 2010

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

  • Меньше настройки и обслуживания (у вас уже есть база данных)
  • Если вы хотите объединить результаты поиска с другими данными или иным образом манипулировать ими, вы сможете сделать это в базе данных
  • Не будет временной задержки (если вы периодически синхронизируете Solr с вашей базой данных) или процедуры обслуживания (если вы решите добавлять / обновлять записи в Solr в режиме реального времени везде, где вы вставляете их в базу данных)

Преимущества решения Solr:

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

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

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

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

...