Получение lucene для возврата только уникальных тем (индексация как тем, так и сообщений) - PullRequest
0 голосов
/ 01 марта 2010

У меня есть StackOverflow-подобная система, в которой контент организован в потоки, причем каждый поток имеет свое собственное содержимое (тело / текст вопроса) и сообщения / ответы.

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

Как я могу заставить Lucene возвращать в качестве результатов только уникальные темы, а также искать содержимое сообщений?

Ответы [ 3 ]

1 голос
/ 03 марта 2010

Когда вы индексируете темы, вы должны разбить каждую ветку на сообщения и сделать каждое сообщение Document с полем, содержащим уникальный идентификатор, идентифицирующий нить, к которой он принадлежит.

При выполнении поиска я бы рекомендовал использовать lucene 2.9 или более позднюю версию, что позволяет использовать Collector. Collectors позволяет предварительно обработать полученные документы и, таким образом, вы сможете сгруппировать сообщения, созданные из одного и того же идентификатора потока.

1 голос
/ 01 марта 2010

Каждый документ может иметь поле «threadId». После выполнения поиска вы можете просмотреть свой набор результатов и вернуть все уникальные идентификаторы threadId.

Сложная часть определяет, сколько результатов вы хотите вернуть. Если вы хотите показать, скажем, 10 результатов на странице результатов, вам, вероятно, понадобится Lucene, чтобы вернуть 10 + m результатов, поскольку определенный процент от возвращаемого набора будет исключен, поскольку они являются записями, принадлежащими одному нить. Вам нужно будет включить некоторую дополнительную логику, которая будет запускать другой поиск Lucene, если дедуплицированный набор <10. </p>

Это то, что делает проект Nutch при свертывании нескольких результатов поиска, принадлежащих одному домену.

0 голосов
/ 23 октября 2011

Только для полной версии, последние версии Lucene (начиная с версии 3.2) поддерживают API группирования, который очень полезен для таких случаев:

http://lucene.apache.org/java/3_2_0/api/contrib-grouping/org/apache/lucene/search/grouping/package-summary.html

...