Lucene MultiFieldQueryParser无法工作

iovurdzv  于 2022-10-22  发布在  Lucene
关注(0)|答案(2)|浏览(171)

我不明白为什么查询不起作用。
我需要按两个字段搜索文档。两个ID-s。如果两个值匹配,则需要搜索文档。ID1和ID2
但我得到了一个空结果。

query = MultiFieldQueryParser.parse(new String[]{id1, id2},
            new String[]{"ID1", "ID2"},
            new SimpleAnalyzer());
        TopDocs topDocs = searcher.search(query, 1);
        Document doc = searcher.doc(topDocs.scoreDocs[0].doc)

该指数100%有效。由其他请求验证。
谢谢你的帮助。

mctunoxg

mctunoxg1#

由于您只想在两个单独的查询之间执行AND交集,而不是真正执行MultiFieldQuery(在多个字段中搜索相同的值),因此Lucene OR search using Boolean Query中显示的稍微修改的版本应该可以工作:

BooleanQuery bothQuery = new BooleanQuery();

                                         // field, value
TermQuery idQuery1 = new TermQuery(new Term("ID1", "id1"));
TermQuery idQuery2 = new TermQuery(new Term("ID2", "id2"));

bothQuery.add(new BooleanClause(idQuery1, BooleanClause.Occur.MUST));
bothQuery.add(new BooleanClause(idQuery2, BooleanClause.Occur.MUST));

TopDocs topDocs = searcher.search(bothQuery, 1);
Document doc = searcher.doc(topDocs.scoreDocs[0].doc)
zpgglvta

zpgglvta2#

感谢MatsLindh给出上述答案。多亏了你,学校作业也解决了类似的问题。
请记住,示例代码已经过时,对于Lucene 8.9(我的例子),您应该这样做

Query query = new BooleanQuery.Builder()
.add(query1, BooleanClause.Occur.MUST)
.add(query2, BooleanClause.Occur.MUST)
.build();
TopDocs topDocs = searcher.search(query, 1);
Document doc = searcher.doc(topDocs.scoreDocs[0].doc)

TermQuery对象和Query对象可以互换使用,以替换上述代码的query1和query2。

相关问题