【问题标题】:Lucene "Or Queries"Lucene“或查询”
【发布时间】:2010-11-13 00:33:17
【问题描述】:

我是 Lucene 的新手,我正在尝试进行类似这样的搜索

 content="some thext" and (id ="A" or id="B" or id="c")

我真的很迷茫,你能帮帮我吗

谢谢。

【问题讨论】:

    标签: search lucene


    【解决方案1】:
    BooleanQuery mainQuery = new BooleanQuery();
    
    TermQuery contentFilter = new TermQuery(new Term("content", "some text"));
    mainQuery.add(contentFilter, BooleanClause.Occur.MUST);
    
    BooleanQuery idFilter = new BooleanQuery();
    idFilter.setMinimumNumberShouldMatch(1);
    idFilter.add(new TermQuery(new Term("id", A)), BooleanClause.Occur.SHOULD);
    idFilter.add(new TermQuery(new Term("id", B)), BooleanClause.Occur.SHOULD);
    idFilter.add(new TermQuery(new Term("id", C)), BooleanClause.Occur.SHOULD);
    mainQuery.Add(idFilter, BooleanClause.Occur.MUST);
    

    【讨论】:

    • 看起来moduleFilter 应该更改为idFilter。无论如何 +1 回答。
    • 我发现有用的解释(来自 Occur javadocs):对于没有 Occur.MUST 子句的 BooleanQuery,一个或多个 Occur.SHOULD 子句必须与文档匹配,以便 BooleanQuery 匹配。
    【解决方案2】:

    我相信Query Parser Syntax documentation 中的“分组”部分提供了答案:

    (jakarta OR apache) AND website
    

    我怀疑您应该将运算符 (and, or) 设为大写。同样,我认为您不能使用等号运算符(改用冒号)。

    content:"some thext" AND (id:"A" OR id:"B" OR id:"c")
    

    【讨论】:

    • 谢谢...你的帮助太成功了
    • 您可以将其简化为:content:"some thext" AND id:("A" OR "B" OR "c")
    【解决方案3】:

    BooleanQuery 现已弃用。

    新语法如下所示。 (应该 == OR,必须 == AND)

    val searchManager = Search.getSearchManager(cache)
    val queryBuilder = searchManager.buildQueryBuilderForClass(classTag[T].runtimeClass).get()
    val luceneQuery = queryBuilder.bool()
    luceneQuery.should(new TermQuery(new Term("type", "lala"))
    luceneQuery.createQuery()
    

    【讨论】:

      猜你喜欢
      • 2022-11-26
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2012-04-25
      • 2013-08-21
      • 2010-10-31
      • 2014-05-21
      相关资源
      最近更新 更多