【问题标题】:Lucene MultiFieldQueryParser does not workLucene MultiFieldQueryParser 不起作用
【发布时间】:2018-07-04 10:35:53
【问题描述】:

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

我需要在两个字段中搜索文档。两个 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% 有效。由其他请求验证。

感谢您的帮助。

【问题讨论】:

  • 那么您是否尝试在两个不同的字段中搜索两个 ID?还是两个不同字段中的单个 id?
  • 两个不同字段中的两个不同 ID。我需要匹配“ID1 AND ID2”
  • id1是否应该只匹配id1字段,id2只匹配id2字段?或者他们可以在任何领域匹配吗? ID1:id1 AND ID2:id2 vs ID1:(id1 id2) ID2:(id1 id2) vs (ID1:id1 OR ID2:id1) AND (ID1:id2 OR ID2:id2)?
  • 是的。 “id1 仅在 id1 字段中匹配,id2 仅在 id2 字段中匹配”。感谢您的帮助。

标签: java solr lucene


【解决方案1】:

由于您只想在两个单独的查询之间执行 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 2015-08-21
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多