Java Lucene对于同一Lucene查询语言,BooleanQuery和QueryParser查询的结果不同
我观察到一种奇怪的行为,但我不知道我做错了什么
我通过多个布尔查询创建了以下查询:
+(-(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所需的相同结果李>
- 我找不到任何关于差异的东西,只是在性能方面(http://www.gossamer-threads.com/lists/lucene/java-user/144374)
# 1 楼答案
我找到了解决问题的办法。 而不是为布尔查询创建以下内容:
我用了这个:
现在我的查询看起来不一样了,但我只得到带有queryFieldName字段的文档
问题似乎是我的第一个解决方案中的主要通配符: Find all Lucene documents having a certain field