Field类是文档索引期间很重要的类,控制着被索引的域值。
在做phrasequery查询的时候,报出了这样一个错误:
Exception in thread "main" java.lang.IllegalStateException: field "content" was indexed without position data; cannot run PhraseQuery (term=lymphoid)
Goolgle下,有前辈说可能是 field index option设置的问题,这里赞一下外国IT社区的技术大牛们,给的解答都很详细。
于是查询Lucene手册,首先查到FieldType类
setIndexOptions(FieldInfo.IndexOptions value)
Sets the indexing options for the field:
继续查找FieldInfo.IndexOptions,发现了
DOCS_AND_FREQS
public static final FieldInfo.IndexOptions DOCS_AND_FREQS
Only documents and term frequencies are indexed: positions are omitted. This enables normal scoring, except Phrase and other positional queries will throw an exception.
注意positions are omitted这句,刚好之前设置了
setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS), 加上位置
setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS),问题解决。