首页 > 解决方案 > Lucene MultiFieldQueryParser 不起作用

问题描述

我不明白为什么查询不起作用。

我需要按两个字段搜索文档。两个 ID。如果 2 个值匹配,则需要搜索文档。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%有效。由其他请求验证。

谢谢您的帮助。

标签: javasolrlucene

解决方案


由于您只想在两个单独的查询之间执行 AND 交集 - 而不是真正执行 MultiFieldQuery(您在多个字段中搜索相同的值),因此应该稍微修改一下Lucene 中显示的版本或使用布尔查询进行搜索工作:

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)

推荐阅读