3

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

4

3 回答 3

4

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

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

有关详细信息,请参阅查询运算符DSL

于 2011-10-16T13:41:50.940 回答
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
于 2011-10-16T08:56:53.680 回答
0

请尝试在下面的方法中传递包含多个字段名称和搜索文本的字符串数组。我将返回 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;
    }
于 2017-10-11T14:17:22.140 回答