Что лучше для дискуссионного форума: индексировать каждую запись в ветке обсуждения как отдельный документ lucene или просто объединить все записи в обсуждении в один большой блок текста и проиндексировать всю ветку обсуждения в виде единого документа lucene?
Как индексировать обсуждения на форуме для поиска?
Ответы (4)
Зависит от того, какие возможности поиска вы ищете. Например, если вы хотите, чтобы пользователи могли искать ключевые слова, встречающиеся в обсуждениях в определенную дату, вы должны проиндексировать все записи как отдельные документы с датой (как файл NumericField доступен для поиска с помощью NumericRangeFilter).
Индексирование каждой записи в виде отдельного документа также позволит вам оценить каждую запись с помощью счетчиков Lucene, которые помогут получить наиболее релевантные записи (а не потоки) в качестве ответа на запрос. Кроме того, вы также можете добавить тему темы в виде отдельного поля в каждый входной документ (за счет небольшого увеличения места).
Объединение всех записей не является хорошей идеей, если вы хотите указать пользователю именно ту запись, которая его интересует. Что касается вашего беспокойства (комментарий к ответу Райана) по поводу возврата нескольких записей из одного потока, вы можете добавить идентификатор потока к каждой записи при индексировании. Затем во время отображения результатов вы можете отображать только запись для каждого идентификатора потока (запись с наивысшим баллом может отображаться вместе с темой потока)
Если вы объедините все записи в обсуждении, вы столкнетесь с ошибкой, из-за которой вы не сможете указать точную запись, которую хотите получить.
Lucene должна иметь возможность быстро индексировать и искать каждую запись (пост/тред/что угодно). Смешивать их все вместе кажется излишним.
Если вы решите проиндексировать их отдельно, вы можете использовать Solr, который собирается поддерживать свертывание результатов поиска:
http://www.lucidimagination.com/blog/2010/09/16/2446/
Я предпочитаю индексировать каждую запись отдельно. Это сделает дизайн более гибким, поскольку в вашей системе должен быть какой-то объект темы для группировки записей в одном потоке. И еще одна проблема, связанная с индексированием с конкатенацией, заключается в необходимости повторной индексации после публикации новой записи, что влияет на производительность.