gpt4 book ai didi

Java Lucene - 对于相同 Lucene 查询语言,BooleanQuery 和 QueryParser 查询的不同结果

转载 作者:行者123 更新时间:2023-12-01 09:03:52 24 4
gpt4 key购买 nike

我观察到一种奇怪的行为,但我不知道我做错了什么。

我通过多个 BooleanQueries 创建了以下查询:

+(-(Request.zipCode:18055 Request.zipCode:33333 Request.zipCode:99999) +Request.zipCode:[* TO *]) *:*

...这是我通过 toString 得到的

更新:这样我创建了 BooleanQuery 的一部分,它负责创建此代码段 +Request.zipCode:[* TO *])

Query fieldOccursQuery = new TermQuery(new Term(queryFieldName, "[* TO *]"));

我通过 QueryParser 创建了完全相同的查询(根据我的理解),如下所示:

String querystr = "+(-(Request.zipCode:18055 Request.zipCode:33333 Request.zipCode:99999) +Request.zipCode:[* TO *]) *:*";
Query query = new QueryParser(Version.LUCENE_46, "title", LuceneServiceI.analyzer).parse(querystr);

我以同样的方式处理它们:

IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
int max = reader.maxDoc();
TopScoreDocCollector collector = TopScoreDocCollector.create(max > 0 ? max : 1, true);
searcher.search(query, collector);
....
ScoreDoc[] hits = collector.topDocs().scoreDocs;
Map<Integer, Document> docMap = new TreeMap<Integer, Document>();
for (int i = 0; i < hits.length; i++) {
docMap.put(hits[i].doc, indexSearcher.doc(hits[i].doc));
}

不同的结果

索引如:stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<Request.zipCode:04103>

  • 通过 QueryParser 的查询按预期交付一份文档

  • 通过 BooleanQuery 进行的查询未提供 1 个预期文档

问题

最佳答案

我找到了解决问题的方法。而不是为 BooleanQuery 创建它:

Query fieldOccursQuery = new TermQuery(new Term(queryFieldName, "[* TO *]"));

我用的是这个:

ConstantScoreQuery constantScoreQuery = new ConstantScoreQuery(new FieldValueFilter(queryFieldName));
query.add(constantScoreQuery, Occur.MUST);

现在我的查询看起来有所不同,但我只获取包含带有我的 queryFieldName 的字段的文档。

问题似乎是我的第一个解决方案中的主要通配符: Find all Lucene documents having a certain field

关于Java Lucene - 对于相同 Lucene 查询语言,BooleanQuery 和 QueryParser 查询的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41445523/

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