【问题标题】:Solr: How to search multiple fieldsSolr:如何搜索多个字段
【发布时间】:2011-10-15 23:05:19
【问题描述】:

我正在使用 solrnet。我有一个标题和描述字段。我需要同时搜索两个字段。我该怎么做?

【问题讨论】:

    标签: c# solr solrnet edismax


    【解决方案1】:

    Jayendra 的回答是正确的,但是如果您想在索引时间 (copyFields) 不聚合单个字段中的数据并希望在查询时间而不是使用标准处理程序而不是 dismax 来执行此操作,那么在 SolrNet 中,您可以做到:

    var query = Query.Field("title").Is(mytitle) || Query.Field("Description").Is(mydescription);
    var results = solr.Query(query);
    

    请参阅query operatorsDSL 了解更多信息。

    【讨论】:

    • 哇..非常有趣。当有人在查询框中键入“火箭科学家”时,我会将其传递给 solrnet。我应该为“mytitle”和“mydescription”输入什么?
    • @Luke101 :它们是相同的......只是代表用户输入的示例变量。例如。 mytitle = mydescription = Request.QueryString["q"];
    • 谢谢..我继续实施了这个解决方案。
    【解决方案2】:

    如果您使用的是标准请求处理程序 -
    创建一个新字段 title_description 并将标题和描述字段复制到此字段。
    将该字段用作默认搜索字段。

    <defaultSearchField>title_description</defaultSearchField>
    

    查询 q 在默认搜索字段上进行搜索 -

    q=bank
    

    如果您可以使用 dismax 或 edismax 查询解析器,您可以定义一个新的请求处理程序。
    将查询字段定义为 qf。

    <requestHandler name="dismax" class="solr.SearchHandler">
       <lst name="defaults">
         <str name="echoParams">explicit</str>
         <!-- Query settings -->
         <str name="defType">edismax</str>
         <str name="qf">
            title description
         </str>
         <str name="q.alt">*:*</str>
         <str name="rows">10</str>
         <str name="fl">*,score</str>
       </lst>
    </requestHandler>
    

    查询 - 将 dismax 作为 qt 参数传递,它将搜索标题和描述字段

    q=bank&qt=dismax
    

    【讨论】:

      【解决方案3】:

      请尝试在下面的方法中传递包含多个字段名称和搜索文本的字符串数组。我将返回 solrnet 查询以搜索具有 OR 条件的多个文件名。

      public ISolrQuery BuildQuery(string[] SearchFields, string SearchText)
          {
      
              AbstractSolrQuery firstQuery = new SolrQueryByField(SearchFields[0], SearchText) { Quoted = false };
              for (var i = 1; i < SearchFields.Length; i++)
              {
                  firstQuery = firstQuery || new SolrQueryByField(SearchFields[i], SearchText) { Quoted = false };
              }
      
              return firstQuery;
          }
      

      【讨论】:

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