具有大写标记的 Elasticsearch word_delimiter 过滤器不匹配

Elasticsearch word_delimiter filter with uppercase token dont match

我使用自定义分析器构建了 ElasticSearch 索引,该分析器使用 lowercase 和带有 keyword 分词器的自定义 word_delimiter 过滤器。

"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 似乎对我的分析器没有影响

知道我做错了什么吗?

我用的是elastic 6.2.4

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

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

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