Как индексировать обсуждения на форуме для поиска?

Что лучше для дискуссионного форума: индексировать каждую запись в ветке обсуждения как отдельный документ lucene или просто объединить все записи в обсуждении в один большой блок текста и проиндексировать всю ветку обсуждения в виде единого документа lucene?


person Roman    schedule 21.09.2010    source источник


Ответы (4)


Зависит от того, какие возможности поиска вы ищете. Например, если вы хотите, чтобы пользователи могли искать ключевые слова, встречающиеся в обсуждениях в определенную дату, вы должны проиндексировать все записи как отдельные документы с датой (как файл NumericField доступен для поиска с помощью NumericRangeFilter).

Индексирование каждой записи в виде отдельного документа также позволит вам оценить каждую запись с помощью счетчиков Lucene, которые помогут получить наиболее релевантные записи (а не потоки) в качестве ответа на запрос. Кроме того, вы также можете добавить тему темы в виде отдельного поля в каждый входной документ (за счет небольшого увеличения места).

Объединение всех записей не является хорошей идеей, если вы хотите указать пользователю именно ту запись, которая его интересует. Что касается вашего беспокойства (комментарий к ответу Райана) по поводу возврата нескольких записей из одного потока, вы можете добавить идентификатор потока к каждой записи при индексировании. Затем во время отображения результатов вы можете отображать только запись для каждого идентификатора потока (запись с наивысшим баллом может отображаться вместе с темой потока)

person athena    schedule 21.09.2010

Если вы объедините все записи в обсуждении, вы столкнетесь с ошибкой, из-за которой вы не сможете указать точную запись, которую хотите получить.

Lucene должна иметь возможность быстро индексировать и искать каждую запись (пост/тред/что угодно). Смешивать их все вместе кажется излишним.

person Ryan Ternier    schedule 21.09.2010
comment
С вашим предложением проблема возникает, когда вы хотите отобразить результаты поиска. Потенциально вы можете получить 20 записей для одной и той же ветки обсуждения в результатах поиска, потому что все записи просто содержат одно и то же слово. Вы понимаете, что я имею в виду? - person Roman; 21.09.2010
comment
Правда, он может возвращать несколько записей, но вы по-прежнему контролируете то, что в конечном итоге отображается, и вы должны иметь возможность четко выбирать отдельные экземпляры каждой записи. - person Ryan Ternier; 21.09.2010

Если вы решите проиндексировать их отдельно, вы можете использовать Solr, который собирается поддерживать свертывание результатов поиска:

http://www.lucidimagination.com/blog/2010/09/16/2446/

person bajafresh4life    schedule 21.09.2010

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

person Sheng Chien    schedule 21.09.2010