Как использовать Lucene FastVectorHighlighter на нескольких полях?

У меня работает основной поиск, и я выделяю, используя FastVectorHighlighter, Когда вы просите маркер для "лучшего фрагмента", у вас есть несколько перегрузок: getBestFragment(s) на выбор, задокументировано здесь. Я сейчас использую самый простой, как это:

highlightedText = highlighter.getBestFragment(fieldQuery, searcher.getIndexReader(), 
     scoreDoc.doc, "description", 100)

Поэтому я выделяю совпадение из поля "описание". Мой запрос, однако, ищет другое поле, "заметки". Как включить это в выделение? Существует перегрузка, которая занимает Set<String> matchedFields и один String storedField, но я не понимаю документы. Документ для метода говорит:

Желательно, чтобы все matchedFields имели один и тот же источник как хранимое поле или по крайней мере являлись его префиксом.

Что это значит? Как мне индексировать строки "заметки" и "описание", и что я пропускаю matchedFields а также storedField?

1 ответ

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

Если вы хотите выделить два разных сохраненных поля, два вызова getBestFragment будет вызван для. Или вы можете использовать другой маркер, который позволяет выделить несколько сохраненных полей одновременно, PostingsHighlighter, например.

Другие вопросы по тегам