Solr:如何搜索多个字段

发布于 2024-12-10 07:02:41 字数 50 浏览 0 评论 0原文

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

I am using solrnet. I have a title and Description fields. I need to search both fields simultaneously. How do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

微凉 2024-12-17 07:02:41

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

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

请参阅查询运算符DSL 了解更多信息。

Jayendra's answer is correct, but if you want to do this without aggregating data in a single field at index-time (copyFields) and want to do it at query-time instead using the standard handler instead of dismax, in SolrNet you can do:

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

See query operators and DSL for more information.

隱形的亼 2024-12-17 07:02:41

如果您使用标准请求处理程序 -
创建一个新字段 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

If you are using a standard request handler -
Create a new field title_description and copy the title and description field to this field.
Use that field as the default search field.

<defaultSearchField>title_description</defaultSearchField>

Query q fired with search on the default search field -

q=bank

OR

If you can use dismax or edismax query parser, you can define a new request handler.
Define the query fields as 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>

Query - pass the dismax as the qt parameter which would search on the title and description fields

q=bank&qt=dismax
时光是把杀猪刀 2024-12-17 07:02:41

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

Please try to pass the string array that contains multiple field names and search text in the below method. I will return the solrnet query for search with multiple filed name with OR condition.

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;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文