我们正在使用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)
还有其他方法可以实现这个功能吗?如果您能分享您的专业知识,我们将不胜感激。
谢谢, 范
答案 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行为。