首页 > 解决方案 > 带有大写标记的 Elasticsearch word_delimiter 过滤器不匹配

问题描述

我使用自定义分析器构建了一个 ElasticSearch 索引,该分析器使用lowercase和自定义word_delimiter过滤器和keyword标记器。

"merged_analyzer": {
   "type": "custom",
   "tokenizer": "keyword",
   "filter": [
     "lowercase",
     "asciifolding",
     "word_delim",
     "trim"
   ]
},
"merged_search_analyzer": {
    "type": "custom",
    "tokenizer": "keyword",
    "filter": [
      "lowercase",
      "asciifolding"
    ]
}

"word_delim": {
   "type": "word_delimiter",
   "catenate_words": true,
   "generate_word_parts": false,
   "generate_number_parts": false,
   "preserve_original": true
}

"properties": {
  "lastName": {
    "type": "keyword",
    "normalizer": "keyword_normalizer",
    "fields": {
      "merged": {
        "type": "text",
        "analyzer": "merged_analyzer",
        "search_analyzer": "merged_search_analyzer"
      }
    }
  }
}

然后我尝试搜索包含破折号分隔的子词的文档,例如'Abc-Xyz'. 使用该.merged领域。'abc-xyz'和(小写)都'abcxyz'匹配,这正是我所期望的,但我希望我的分析器也匹配大写字母或空格(例如'Abc-Xyz''abc-xyz ')。

看起来像过滤器trimlowercase对我的分析仪没有影响

知道我做错了什么吗?

我使用弹性 6.2.4

标签: elasticsearchsearchdelimiter

解决方案


我不确定,但可能是搜索分析器与索引分析器不同。您可以做两件事来检查这一点。

  1. 配置一个 search_analyzer:https : //www.elastic.co/guide/en/elasticsearch/reference/6.2/search-analyzer.html 将使用您的merged_analyzer进行分析。

  2. 使用分析 API:https ://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html 以检查您的搜索令牌是否符合预期。


推荐阅读