Lucene.NET: лучший способ обрабатывать фрагменты ключевых слов из текста документа - PullRequest
0 голосов
/ 30 октября 2009

Я использую Lucene.Net для реализации поискового веб-сайта (для поиска PDF-файлов). Когда ключевое слово введено, я отображаю результаты, а когда щелкаю один из элементов результатов, я хочу перевести пользователя на страницу «Подробности», где я хочу отображать фрагменты из этого документа PDF везде, где найдено ключевое слово.

Итак, мой вопрос: как лучше всего собрать эти фрагменты из этого документа?

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

  2. Или, так как у меня уже есть текстовое содержимое для каждой записи результата, было бы лучше вручную обрабатывать фрагменты с помощью манипуляции со строками C #?

Если это 1., не могли бы вы указать мне пример того, как написать запрос для поиска одного документа в Lucene?

Спасибо.

1 Ответ

0 голосов
/ 02 ноября 2009

Вероятно, вам следует использовать пакет Lucene Highlight, потому что ваш запрос и документ должны быть токенизированы с использованием того же анализатора, который использовался для индексации документа. Использование C # напрямую через строковые методы может сработать, но вам придется использовать ту же логику токенизации, чтобы сопоставить условия запроса с текстом документа (например, основание, стоп-слова и т. Д.). Если вы сохраняете полный текст документа в указателе, то использовать маркер просто. Вы также можете получить текст документа из другого места, если не сохраните текст в индексе. Вам нужно будет передать тот же запрос, который использовался при первоначальном поиске, и включить точное соответствие для документа, который вы хотите выделить, например, добавив обязательное условие в запрос для уникального идентификатора этого документа. Запрос, используемый для одного документа, должен иметь 2 обязательных предложения, первое предложение - это исходный запрос, используемый для первоначального поиска документа, а другое предложение - некоторый уникальный идентификатор для этого отдельного документа. Таким образом, маркер может использовать тот же запрос для генерации выделенных фрагментов.

...