#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. тем не менее, это может быть ошибкой, если вы хотите выделить текст поля документа и не знаете о таком требовании выделения.