Lucene MultiFieldQueryParser и Highlighter
Я индексирую статьи в lucene index через разные поля, т.е. title
, description
, link
, publishDate
Я запрашиваю индекс, используя MultiFieldQueryParser, как
+(title:[text]^5.0 description:[text]^4.0 link:[text]^3.0) +publishDate:[20150101 TO 20150531]
а затем я показываю статьи в качестве результатов поиска. Пока все хорошо. Теперь я хочу выделить поисковый текст в заголовке описания
Как мне идти об этом? Обычный Highlighter дает мне NullPointerException при генерации фрагментов. и PostingHighlighter дает мне Map
с результатами, сгруппированными по полю.. но я не хочу этого так. Я был весь документ, который должен быть возвращен вместе с выделением текста поиска в заголовке и описании.
Любая помощь или предложение или фрагмент кода приветствуется.
1 ответ
Решение
Я получил это с помощью FieldType
для всех полей, которые я хотел выделить:
FieldType ft = new FieldType();
ft.setIndexed(true);
ft.setIndexOptionsFieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
ft.setStored(true);
ft.setStoreTermVectors(true);
ft.setStoreTermVectorOffsets(true);
ft.setTokenized(true);
ft.stored();
QueryScorer qs = new QueryScorer(q);
Highlighter h = new Highlighter(qs);
highlighter.setTextFragmenter(new SimpleFragmenter(300));
String highlighted = h.getBestFragment(new StandardAnalyzer(),f,Text);