我正在使用solrnet。我有一个标题和说明字段。我需要同时搜索这两个字段。我该怎么做?
答案 0 :(得分:4)
Jayendra的回答是正确的,但是如果你想在没有在索引时(copyFields)的单个字段中聚合数据而想要在查询时使用标准处理程序而不是dismax来执行此操作,那么在SolrNet中你能做到:
var query = Query.Field("title").Is(mytitle) || Query.Field("Description").Is(mydescription);
var results = solr.Query(query);
有关详细信息,请参阅query operators和DSL。
答案 1 :(得分:2)
如果您使用标准请求处理程序 -
创建一个新字段title_description并将标题和描述字段复制到该字段
将该字段用作默认搜索字段。
<defaultSearchField>title_description</defaultSearchField>
在默认搜索字段 -
上使用搜索触发查询qq=bank
OR
如果您可以使用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
答案 2 :(得分:0)
请尝试在以下方法中传递包含多个字段名称和搜索文本的字符串数组。我将返回带有OR条件的多个字段名称的搜索solrnet查询。
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;
}