Поисковая система (solr / sphinx) в базе данных - PullRequest
1 голос
/ 15 декабря 2009

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

Мне интересно одно; я должен индексировать только thread.title, thread.body и post.body или я должен индексировать имя пользователя, дату создания, количество сообщений, просмотров, страну, регион и город, который принадлежит теме?

Я имею в виду, что когда пользователь ищет поток, он получит возвращенные хиты, содержащие заголовок темы, 2 строки тела, который пользователь опубликовал, дату создания, теги и т. Д.

Должен ли я индексировать всю эту информацию тоже? Но тогда это будет почти вся база данных, или я должен просто проиндексировать 3 первых столбца, которые я упомянул для полнотекстового поиска?

Еще один вопрос: когда пользователь публикует новую тему, я должен немедленно сказать solr добавить эту строку? Если я не, как бы это было для поиска?

1 Ответ

3 голосов
/ 15 декабря 2009

Я использовал Apache Lucene, но я еще не использовал Apache Solr. Поэтому я экстраполирую часть этого ответа. Но индексирование Lucene - это то, что делает Solr мощным, поэтому я полагаю, что это почти то же самое.

Я бы добавил все, что вам может понадобиться, как часть содержимого для поиска или возврата в результате поиска.

Обратите внимание, что Lucene позволяет добавлять поля в документ как "не проанализированные" - это означает, что эти поля не являются частью содержимого для поиска. Но дополнительные поля возвращаются, когда вы выполняете поиск, и он находит этот документ. Альтернативой является включение только первичного ключа, а затем вам придется использовать его для поиска SQL после того, как вы нашли соответствующие документы.

Lucene также поддерживает запросы к определенным полям в индексе. Таким образом, вы можете включить все поля в индекс, но если вы хотите, чтобы данный поиск соответствовал только подмножеству полей, вы можете сделать это.

Наконец, да, вы должны синхронизировать индекс Lucene / Solr с данными в вашей базе данных. Вы можете использовать DataImportHandler , чтобы помочь загружать пакеты данных из СУБД на сервер Solr. Или вы можете использовать REST-подобный HTTP-интерфейс Solr для публикации отдельных документов, если они нужны для индексирования в реальном времени при создании новых потоков.

...