Можем ли мы получить позицию совпадающих элементов в Lucence.чистый результат поиска?

#lucene.net #highlight

#lucene.net #выделить

Вопрос:

Я использую Lucene.net для реализации функции полнотекстового поиска в Asp.net приложение. Страница результатов поиска должна выделять совпадающие элементы. Я получил экземпляр Lucene.Net.Search.Нажимает и использует метод .Doc (int i) для получения документа Lucene.

Но я не знаю, как получить позицию совпадающего элемента с помощью существующего метода или свойства какого-либо класса Lucene. Позволяет Lucene.net предоставьте любую функцию для поддержки строки запроса high light?

Ответ №1:

Вы можете использовать Highlighter or FastVectorHighlighter , который можно найти в контрибе

Ответ №2:

Как сказал предыдущий ответчик, вам следует использовать либо Highlighter, либо FastVectorHighlighter из contrib.

Вот пример использования библиотеки Highlighter для получения выделенных фрагментов:

 Formatter formatter = new SimpleHTMLFormatter("<span><b>", "</b></span>");
Lucene.Net.Highlight.Scorer scorer = new QueryScorer(query, field);
Lucene.Net.Highlight.Encoder encoder = new SimpleHTMLEncoder();
var highlighter = new Highlighter(formatter, encoder, scorer);
highlighter.SetTextFragmenter(new SimpleFragmenter(100));

string[] fragments = 
    highlighter.GetBestFragments(DefaultAnalyzer, field, doc.Get(field), 3);
  

Некоторые ошибки, связанные с подсветкой:

  • Чтобы выделить поле, его следует добавить в индекс с Field.Store.YES опцией

  • Ваш запрос следует переписать, прежде чем передавать его в highlighter

  • Анализатор, который вы передаете в highlighter, должен быть тем же, который вы используете для индексации и поиска

Комментарии:

1. To highlight a field, it should be added to index with Field.Store.YES option Вам не нужно сохранять, если вы планируете выделить внешний источник, такой как исходный (текстовый) индексированный файл.

2. @L.B. тем не менее, это может быть ошибкой, если вы хотите выделить текст поля документа и не знаете о таком требовании выделения.