【问题标题】:Solr search query over multiple fieldsSolr 搜索多个字段的查询
【发布时间】:2011-12-26 18:12:18
【问题描述】:

是否可以在 Solr 中使用两个不同的词在两个字段上进行搜索,并且只返回包含这两个词的结果?

例如,如果我有字段 "type" 和 "location" ,我只想要那些包含 type='furniture' 和 location = 'office' 的结果。

【问题讨论】:

    标签: solr


    【解决方案1】:

    您可以使用布尔运算符并搜索各个字段。

    q=type:furniture AND location:office
    

    如果值是固定的,最好使用过滤查询来提高性能。

    fq=type:furniture AND location:office
    

    【讨论】:

    • 每当您有这样一个使用 AND 的查询时,最好考虑将其更改为使用过滤查询 fq=,因为这样会更快。
    • 是的...同意。如果要求是过滤而不是搜索,则应始终应用 fq。
    • 请在否决答案时提供 cmets。当然有帮助。
    • 如果我想进行 FQ,您能否建议我如何进行 Solrnet 查询?
    【解决方案2】:

    您还可以在 dismaxRequest 处理程序上使用 boostQuery 函数

    type=dismax&bq=type:furniture AND location:office
    

    【讨论】:

      【解决方案3】:
      fq=type:furniture AND location:office
      

      除了使用 AND,这也可以分成两个过滤器查询。

      fq=type:furniture
      fq=location:office
      

      【讨论】:

        【解决方案4】:

        建议的解决方案有一个缺点,即您必须关心转义特殊字符。 如果用户搜索“type:d'or AND location:coffee break”,查询将失败。

        我建议结合两个 edismax 处理程序:

         <requestHandler name="/combine" class="solr.SearchHandler" default="false">
             <lst name="invariants">
               <str name="q">
                (_query_:"{!edismax qf='type' v=$uq1}"
           AND _query_:"{!edismax qf='location' v=$uq2}")
               </str>
             </lst>
          </requestHandler>
        

        像这样调用请求处理程序:

        http://localhost:8983/solr/collection1/combine?uq1=furniture&uq2=office
        

        说明

        • 变量 $uq1 和 $uq2 将被请求参数 uq1 和 uq2 替换。
        • 第一个 edismax 查询 (uq1) 的结果通过逻辑 AND 与第二个 edismax 查询 (uq2) 组合

        Solr 文档

        https://wiki.apache.org/solr/LocalParams

        【讨论】:

          猜你喜欢
          • 2022-01-09
          • 2012-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多