【问题标题】:Custom stopword analyzer is not woring properly自定义停用词分析器无法正常工作
【发布时间】:2020-07-03 23:18:27
【问题描述】:

我已经使用自定义分析器为停用词创建了一个索引。我希望弹性搜索在搜索时忽略这些词。然后我在elasticsearch映射中添加了一个文档数据。 但是当我在 kibana 中使用查询查询“the”关键字时。它不应该显示任何成功的匹配,因为在 my_analzer 我已将“the”放在 my_stop_word 部分。但它显示了比赛。我研究过,如果您在映射字段中索引时提到一个分析器。然后在查询时默认使用该分析器。 请帮忙!

PUT /pandey
{ 
  "settings":  
  { 
    "analysis":  
    { 
      "analyzer":  
      { 
        "my_analyzer":  
        { 
          "tokenizer": "standard", 
          "filter": [ 
            "my_stemmer", 
            "english_stop", 
            "my_stop_word", 
            "lowercase" 
          ] 
        } 
      }, 
      "filter": { 
        "my_stemmer": { 
          "type": "stemmer", 
          "name": "english" 
        }, 
        "english_stop":{ 
          "type": "stop", 
          "stopwords": "_english_" 
        }, 
        "my_stop_word": { 
          "type": "stop", 
          "stopwords": ["robot", "love", "affection", "play", "the"] 
        } 
      }
    } 
  },
  "mappings": {
    "properties": {
      "dialog": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}


 PUT pandey/_doc/1
 {
    "dailog" : "the boy is a robot. he is in love. i play cricket"
 }

 GET pandey/_search
    {
      "query": {
        "match": {
          "dailog": "the"
        }
      }
    }

【问题讨论】:

  • 这适用于 7.6 版本。您能否尝试使用并查看使用analyze API 生成的令牌。也只需使用GET pandey/_mapping 进行交叉检查以查看映射是否符合预期。很多时候,人们将模板用于语言过滤器等等,他们看到了意想不到的结果。也可以尝试删除索引并重新创建它,看看是否有任何不同。

标签: elasticsearch kibana analyzer stop-words


【解决方案1】:

一个小的拼写错误可能会导致这种情况。

您为dialog 定义了映射,但添加了字段名称为dailog 的文档。 elastic 的动态字段映射行为将对其进行索引而不会出错。不过我们可以禁用它。

所以查询,"dailog": "the" 将使用默认分析器得到结果。

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多