【发布时间】:2011-10-15 23:05:19
【问题描述】:
我正在使用 solrnet。我有一个标题和描述字段。我需要同时搜索两个字段。我该怎么做?
【问题讨论】:
我正在使用 solrnet。我有一个标题和描述字段。我需要同时搜索两个字段。我该怎么做?
【问题讨论】:
Jayendra 的回答是正确的,但是如果您想在索引时间 (copyFields) 不聚合单个字段中的数据并希望在查询时间而不是使用标准处理程序而不是 dismax 来执行此操作,那么在 SolrNet 中,您可以做到:
var query = Query.Field("title").Is(mytitle) || Query.Field("Description").Is(mydescription);
var results = solr.Query(query);
请参阅query operators 和DSL 了解更多信息。
【讨论】:
如果您使用的是标准请求处理程序 -
创建一个新字段 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
【讨论】:
请尝试在下面的方法中传递包含多个字段名称和搜索文本的字符串数组。我将返回 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;
}
【讨论】: