【问题标题】:How to enable fuzzy search on solr 7.7?如何在 solr 7.7 上启用模糊搜索?
【发布时间】:2019-04-10 14:24:07
【问题描述】:

我正在尝试对标题文本进行模糊搜索,但 solr 没有在拼写错误的品牌名称“hilfinger”查询中给我任何结果:

http://rex:8983/solr/project/select?fq=white_label_id%3A6&q=title%3Ahilfinger~
{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"title:hilfinger~",
      "fq":"white_label_id:6",
      "_":"1554887612686"}},
  "response":{"numFound":0,"start":0,"docs":[]
  }}

使用标准搜索我会得到正确命名的结果hilfiger

http://rex:8983/solr/project/select?fq=white_label_id%3A6&q=title%3Ahilfiger
{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"title:hilfiger",
      "fq":"white_label_id:6",
      "_":"1554887612686"}},
  "response":{"numFound":27,"start":0,"docs":[
      {

我需要在solr的配置中激活什么来启用模糊搜索,或者得到0结果的原因是什么?

【问题讨论】:

  • title字段的类型是什么?词干可能会影响存储的标记,这意味着 hilfiger 被词干为 hilfig,并且与 hilfinger 的距离比默认的编辑距离更远。

标签: solr


【解决方案1】:

是的!你可以。您只需正确配置您希望启用模糊搜索或部分匹配的schema.xml 中的字段。您可以在索引期间向所需字段添加过滤器,以告诉 Solr 除了存储原始值之外,还要存储每个值的 ngrams。稍后,可以对该字段进行模糊搜索。默认情况下存在两种类型的过滤器,您只需将它们附加到您的索引分析器过滤器链。

在这两种情况下,您都必须定义要在索引期间生成的 ngram 的最小和最大大小。 (请注意,这也会增加索引的大小。)让我们在 schema.xml 中使用过滤器定义标题字段。

<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
   </analyzer>
</fieldType>

这里的配置定义了 ngram 的最小大小为 2 个字母,最大为 15 个。 您可以通过替换该行来更改过滤器以从字段值的任何位置启用部分匹配,

<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>

与,

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2013-02-18
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多