Lucene 5.2.1 PhraseQuery被索引而没有位置数据无法运行PhraseQuery

Ser*_*ers 2 lucene

当我PhraseQuery在名为“内容”的字段上进行研究时,我收到一个例外。
为了对此进行索引,我使用了org.apache.lucene.document.TextField该类,因为该字段包含许多单词。
我使用FrenchAnalyzerand RAMDirectory类创建索引。

线程“主”中的异常java.lang.IllegalStateException:索引了字段“ comment”,而没有位置数据;无法在org.apache.lucene.search.Weight.bulkScorer(Weight.java)上的org.apache.lucene.search.PhraseQuery $ PhraseWeight.scorer(PhraseQuery.java:301)上运行PhraseQuery(短语=注释:“ skype”) :137),位于org.apache.lucene.search的org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:485),位于org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:768)。 org上的org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:410)的IndexSearcher.search(IndexSearcher.java:410)org上的org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:439) org.memory.Mem_04上的.memory.LuceneIndexer.wildcardSearchIndex(LuceneIndexer.java:189)。

idxfld = new TextField(field.getFieldname(),(String) field.getValue(),Field.Store.YES);

PhraseQuery query = new PhraseQuery();
query.setSlop(0);
query.add(new Term("comment","the"));
query.add(new Term("comment","skype"));
System.out.println(query.toString());
int numResults = 1000;
ScoreDoc[] hits = searcher.search(query, numResults).scoreDocs;
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗 ?哔叽

cri*_*var 6

检查是否已使用不同的字段类型为同一字段建立索引。

document.Add(new TextField("comment", "Lucene rocks, do you agree?", FieldStore.YES);
.
.
document.Add(new StringField("comment", "Sure", FieldStore.YES);
Run Code Online (Sandbox Code Playgroud)

如果您运行此短语查询,则上面的代码将产生“ IllegalStateException字段-被索引而没有位置数据 ”错误

评论:“露西恩岩”

因此,请确保始终使用TextField。或者,您也可以使用一个自定义字段,将IndexOption设置为DOCS_AND_FREQS_AND_POSITIONS