【问题标题】:How to combine two queries in Solr with ComplexPhraseQueryParser?如何将 Solr 中的两个查询与 ComplexPhraseQueryParser 结合起来?
【发布时间】:2017-05-17 03:35:39
【问题描述】:
  1. 当我在 Solr 4.0 中分别使用以下两个过滤器查询进行搜索时,它按预期工作。

    {!complexphrase inOrder=true}employeeName_t:"Mike R*"

    empDate_dt:[2016-10-10T00:00:00Z TO 2016-10-10T23:59:59Z]

  2. 但是当我结合这两个查询时,我没有得到正确的搜索结果(无论顺序如何)。

    • {!complexphrase inOrder=true}employeeName_t:"Mike R*" AND empDate_dt:[2016-10-10T00:00:00Z TO 2016-10-10T23:59:59Z]

    这个查询在 Solr 中给了我零个搜索结果

    “响应”:{ “找到的数量”:0, “开始”:0, “最大分数”:0, “文档”:[] }

    • empDate_dt:[2016-10-10T00:00:00Z TO 2016-10-10T23:59:59Z] AND {!complexphrase inOrder=true}employeeName_t:"Mike R*"

    而查询顺序的变化给我解析异常如下

    “错误”:{ “味精”:“org.apache.solr.search.SyntaxError:org.apache.lucene.queryparser.classic.ParseException:不能 解析 'employeeName_t:\"Mike': 第 1 行第 21 列出现词法错误。遇到:之后:\"\\"Mike\"",代码:400 }

    在 solr 中使用 ComplexPhraseQueryParser 进行部分搜索。需要同时使用这两个查询。对此的任何建议将不胜感激。

【问题讨论】:

    标签: search solr lucene


    【解决方案1】:

    我建议你使用 fq 参数。

    使用查询检索文档:"Mike R*" 并使用 fq 参数中指定的日期进行过滤。

    例子:

    q={!complexphrase inOrder=true}employeeName_t:"Mike R*"&fq=empDate_dt:["2016-10-10T00:00:00Z" TO "2016-10-10T23:59:59Z"]
    

    【讨论】:

    • 两者都用作过滤器查询[多个过滤器]。是否可以在 fq 中同时使用它们并使其工作?提前致谢。
    • 是的,SOLR (>4.5) 支持,fq=(field1:value1 OR field2:value2)。你可以使用q=mainQuery(*:*)&fq=({!complexphrase inOrder=true}employeeName_t:"Mike R*" AND empDate_dt:["2016-10-10T00:00:00Z" TO "2016-10-10T23:59:59Z"] )
    • 相应地更改主查询 q 和运算符。
    • 单独的日期似乎有一些问题。如果在复杂查询后的第二部分中给出,您的查询适用于字符串、文本字段甚至整数字段。只是没有日期。
    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 2017-05-31
    • 2020-03-25
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多