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

时间:2015-09-25 11:49:47

标签: lucene

我在名为' content'的字段上使用PhraseQuery进行研究时收到异常。

要对此进行索引,我使用org.apache.lucene.document.TextField类,因为该字段包含许多单词 我使用FrenchAnalyzerRAMDirectory类来创建索引。

  

线程中的异常" main" java.lang.IllegalStateException:field" comment"被索引没有位置数据;无法运行PhraseQuery(短语=评论:" skype")       在org.apache.lucene.search.PhraseQuery $ PhraseWeight.scorer(PhraseQuery.java:301)       在org.apache.lucene.search.Weight.bulkScorer(Weight.java:137)       在org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:768)       在org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:485)       在org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:694)       在org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:410)       在org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:439)       在org.memory.LuceneIndexer.wildcardSearchIndex(LuceneIndexer.java:189)       在org.memory.Mem_04.main(Mem_04.java:60)

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;
你能帮帮我吗? 哔叽

1 个答案:

答案 0 :(得分:5)

检查您是否使用不同的字段类型索引了相同的字段。

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

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

  

评论:" Lucene摇滚"

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