【问题标题】:SOLR - Exact Matching with Phrase and Boolean SearchSOLR - 与短语和布尔搜索的精确匹配
【发布时间】:2011-11-21 11:06:33
【问题描述】:

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

具体来说,我们在架构中有一个文本类型字段,我们还想应用带有短语和布尔搜索的精确匹配搜索。

例如:

用户输入:

董事和(财务或财务主管或会计)

…..但不幸的是,结果返回的记录带有如下词:

帐户

控制

等等

所以本质上,SOLR 是在 inside 词中搜索——这当然是我们不想要的。 (是的,它至少在一组结果的最后对这些结果进行了优先排序……但是,我们的用户仍然想要“精确匹配”搜索应该提供的精确匹配。

我们曾考虑将字段更改为 STRING 而不是 TEXT 类型,但 STRING 不能很好地用于短语和布尔搜索。

【问题讨论】:

  • Stemming 会以牺牲精度为代价提高召回率。在大多数应用程序中,这是一件好事。当然是 YMMV。

标签: solr


【解决方案1】:

您可以使用不同的数据类型创建/复制此字段。

这样你就有了。

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>

注意:我没有测试过这个配置,但它应该会给你你想要的结果,或者至少按照你需要的顺序。

【讨论】:

    【解决方案2】:

    您需要禁用词干提取。如果您查看 Solr schema.xml 文件,您会发现控制在每个字段上完成的处理类型的字段和字段类型的定义。很可能您只是获取了默认值而根本没有配置它?我建议您花一些时间来了解该文件中的选项;他们有据可查on the solr wiki。但是您要问的问题很可能是 PorterStemFilter 的影响,因此您可以尝试将其注释掉并重新加载数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多