使用Solr搜索动态字段列表的最佳方法?

时间:2013-07-08 12:13:29

标签: solr dih

我们正在使用Solr作为后端引擎来实现搜索功能。使用DIH从数据库中提取数据。该文件的关键信息包括:

- product number  (number) 
- product name    (name) 
- applicant name (applicant) 
- product purpose (purpose)

存储所有字段并编制索引。

我们提供单个搜索框,供用户输入任意数量的关键字,系统将搜索所有字段并尝试匹配所有字段。为此,我们使用" copyField"创建了上述所有信息的附加字段。

但是,另一个要求是用户可以限制他们在所选目标字段中的搜索。例如,用户只能选择名称和用途字段。在这种情况下,关键字搜索只会从这两个字段中搜索。

目前,我们使用以下查询方法来实现该功能:

例如,鉴于

- the user provide keywords: K1 and K2, 
- and the user want to search on name, applicant and purpose only, 

将动态生成以下搜索字符串并将其发送给Solr:

(name:K1 OR applicant:K1 OR purpose:K1) AND (name:K2 OR applicant:K2 OR purpose:K2)

还有其他方法可以实现这个功能吗?如果您能分享您的专业知识,我们将不胜感激。

谢谢, 范

1 个答案:

答案 0 :(得分:0)

您可以检查带有edismax的请求处理程序和默认配置qf,它将在包含所有字段数据的copyfield上进行搜索。

要执行查询的qf查询字段。

您只需将单个参数传递给solr qt=edismax&q=K1 K2进行搜索。

<requestHandler name="edismax" class="solr.SearchHandler" >
    <lst name="defaults">
        <str name="defType">edismax</str>
        <str name="qf">
            all_fields
        </str>
        <str name="fl">
            *,score
        </str>
        <str name="q.alt">*:*</str>
    </lst>   
</requestHandler>

如果用户想要搜索名称或目的,我建议只将字段和查询传递给此请求处理程序。
传递的参数将覆盖默认参数。

您只需将单个参数传递给solr qt=edismax&q=K1 K2&qf=name applicant进行搜索。

您可以使用mm(最小匹配)参数控制OR行为。