2014-12-27 2 views
2

를 던졌습니다 :루씬 하이 라이터는 예외 내가 얻을 IllegalArgumentException가

java.lang.IllegalArgumentException: Cannot create Token Stream from Terms without offsets 

내 코드 : 여기

Highlighter hl = new Highlighter(new SimpleHTMLFormatter(), new QueryScorer(titleQuery)); 
hl.setTextFragmenter(new NullFragmenter()); 
String text = searcher.doc(scoreDocs[i].doc).get("title"); 
TokenStream ts = TokenSources.getAnyTokenStream(searcher.getIndexReader(), scoreDocs[i].doc, "title", analyzer); 
String frag = hl.getBestFragment(ts, text); 

(생성 TokenStream 예외가 발생합니다)를 제목 필드가 인덱싱 방법은 다음과 같습니다

FieldType ft = new FieldType(); 
ft.setIndexed(true); 
ft.setStored(true); 
ft.setStoreTermVectors(true); 
ft.setStoreTermVectorOffsets(true); 
ft.setStoreTermVectorPositions(true); 
doc.add(new Field("title", title, ft)); 

본인이 명확하게 약관을 저장하고 있기 때문에 당황 스럽습니다. ffsets 및 위치

나는 ft.setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS)을 시도했지만 차이를 보이지 않았습니다.

답변

0

당신은 setTokenized (true)를 추가하는 것을 잊지 마십시오. 다음과 같이하면 효과가 있습니다.

FieldType type = new FieldType(); 
    type.setIndexed(true); 
    type.setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); 
    type.setStored(true); 
    type.setStoreTermVectors(true); 
    type.setTokenized(true); 
    type.setStoreTermVectorOffsets(true); 

세부 내용은 참조하십시오 Highlighting In Lucene