SOLR - 与短语和布尔搜索的精确匹配

时间:2011-09-20 21:27:09

标签: solr

我们需要一些帮助来帮助我们的SOLR部署与EXACT MATCH搜索功能一起使用。

具体来说,我们在架构中有一个文本类型字段,我们也想要使用短语和布尔搜索来应用完全匹配搜索。

例如:

用户输入:

董事及(财务或控制人或会计)

......但不幸的是,结果返回的记录包括:

ACCOUNT

控制

基本上,SOLR正在搜索里面的字 - 这当然是我们不想要的。 (是的,它至少会在一组结果的最后结束时优先考虑这些结果......但是,我们的用户仍然想要精确匹配“完全匹配”搜索应该提供的。

我们考虑过将字段更改为STRING而不是TEXT类型,但STRING在短语和布尔搜索方面效果不佳。

2 个答案:

答案 0 :(得分:2)

你需要禁用词干。如果查看Solr schema.xml文件,您将找到控制在每个字段上完成的处理类型的字段和字段类型的定义。你很可能只是抓住了默认设置并且根本没有配置它?我建议你花点时间了解该文件中的选项;他们有很好的记录on the solr wiki。但是你要问的事情很可能就是PorterStemFilter的影响,所以你可能会尝试只是评论它并重新加载你的数据。

答案 1 :(得分:2)

您可以使用其他数据类型创建/复制此字段。

所以你会有。

<强> schema.xml中

<field name="title" type="text"  indexed="true" stored="true"/> 
<field name="titleExactMatch" type="string"  indexed="true" stored="true"/> 

 <copyField source="title" dest="titleExactMatch"/>

然后覆盖“搜索的权重”重新定义qf。

<强> solrconfig.xml中

<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
     will be overridden by parameters in the request
  -->
 <lst name="defaults">
   <str name="df">titleExactMatch</str>
   <str name="echoParams">explicit</str>
   <int name="rows">10</int>       
   <str name="defType">edismax</str>
   <str name="qf">titleExactMatch^2.2 title^0.4</str>
   <str name="sort">score desc, _version_ desc, title desc</str>
 </lst>

注意:我没有对此配置进行测试,但它应该为您提供所要求的结果,或者至少按照您需要的顺序。