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

Любая помощь, предложение или фрагмент кода приветствуются.


person Sneha    schedule 06.06.2015    source источник
comment
Разместите свой код Highlighter, чтобы мы могли видеть, что вам не хватает.   -  person user1071777    schedule 15.06.2015


Ответы (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);
person Sneha    schedule 16.06.2015