Имеется запрос и результат выполнения этого запроса на индексе Lucene.NET. Вопрос состоит в том, как можно подсветить найденные вхождения слов запроса в результатах. Обязательно ли для этого хранить текст в индексе?
Как подсветить ключевые слова в результатах поиска Lucene.NET?
2
Спросил
Новые ответы
0
Нужно использовать проект Highlighter из поставки Lucene.NET (папка contrib\Highlighter.Net). Это порт аналогичного проекта для Java. Вот пример использования:
var scorer = new QueryScorer(queryObject);
var highlighter = new Highlighter(scorer);
highlighter.SetTextFragmenter(new SimpleFragmenter(300));
var highlitedFragment = highlighter.GetBestFragment(
analyzer, field, textToHighlight);
Объект Highlighter
осуществляет анализ текста на основе запроса и возвращает фрагменты, содержащие наибольшее число вхождений ключевых слов.
По умолчанию все вхождения оборачиваются тегами <b></b>
. Это поведение можно изменить, указав объект Formatter
:
// ...
var highlighter = new Highlighter(
new SimpleHTMLFormatter("<SPAN class='selected'>", "</SPAN>"), scorer);
Размер возвращаемых фрагментов можно менять в объекте Fragmenter:
highlighter.SetTextFragmenter(new SimpleFragmenter(300));