gpt4 book ai didi

Lucene 5.2.1 PhraseQuery 已索引但没有位置数据无法运行 PhraseQuery

转载 作者:行者123 更新时间:2023-12-02 11:39:29 27 4
gpt4 key购买 nike

当我使用 PhraseQuery 对名为“content”的字段进行研究时,出现异常。
为了索引这个字段,我使用 org.apache.lucene.document.TextField 类,因为该字段包含许多单词。
我使用 FrenchAnalyzerRAMDirectory 类来创建索引。

Exception in thread "main" java.lang.IllegalStateException: field "comment" was indexed without position data; cannot run PhraseQuery (phrase=comment:"the skype") at org.apache.lucene.search.PhraseQuery$PhraseWeight.scorer(PhraseQuery.java:301) at org.apache.lucene.search.Weight.bulkScorer(Weight.java:137) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:768) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:485) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:694) at org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:410) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:439) at org.memory.LuceneIndexer.wildcardSearchIndex(LuceneIndexer.java:189) at 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;

你能帮我吗?谢尔盖

最佳答案

检查您是否使用不同的字段类型对同一字段建立了索引。

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

如果您运行此短语查询,上述代码将产生“IllegalStateException 字段 - 在没有位置数据的情况下编制索引”错误

comment: "Lucene rocks"

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

关于Lucene 5.2.1 PhraseQuery 已索引但没有位置数据无法运行 PhraseQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32781557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com