使用自定义标准化器作为​​ elasticsearch 中所有 text/keywords 字段的默认值

Use custom normalizer as default for all text/keywords fields in the elasticsearch

我想在 elasticsearch 中使用不区分大小写的排序。但是 ES 默认使用 ASCII 排序。所以要进行不区分大小写的搜索。我必须使用标准化器。

{
  "analysis": {
    "normalizer": {
      "custom_sort_normalizer": {
        "type": "custom",
        "char_filter": [],
        "filter": [
          "lowercase",
          "asciifolding"
        ]
      }
    }
  }
}

我想将此 custom_sort_normalizer 应用于所有基于文本或关键字的字段。当我使用 AWS elasticsearch 时,我不能简单地关闭索引并应用此标准化器。要么我必须重新索引并从头开始创建索引,我想在将来避免这两个选项。

现在,我正在映射中手动添加以告诉 elasticsearch 使用标准化器。无论如何我可以把它设为默认吗?

更新:我正在使用 yaml 文件维护映射。下面是一个示例映射。

properties:
  studetName:
    type: text
    fields:
      keyword:
        type: keyword
        ignore_above: 256
  studentGender:
    type: text
    fields:
      keyword:
        type: keyword
        ignore_above: 256
  studentGroup:
    type: text
    fields:
      keyword:
        type: keyword
        normalizer: custom_sort_normalizer
        ignore_above: 256

我的主要 objective 是我们在此 mapping.yaml 中添加的每个新文本字段(该索引中的每个新 text/keyword 文件)默认情况下都应使用规范化器。

如果我理解正确,您希望将您的自定义 custom_sort_normalizer 应用到您未来的 elasticsearch 索引中的所有字段。如果是,那么您可以简单地使用 index template,这将允许您在模板中定义此设置,稍后您可以在此模板上应用到您未来的索引。

来自文档

Index templates allow you to define templates that will automatically be applied when new indices are created. The templates include both settings and mappings and a simple pattern template that controls whether the template should be applied to the new index.

您可以利用 dynamic templates 来实现您想要的。 使用如下映射创建索引模板:

 PUT my-index
{
  "settings": {
    "index": {
      "analysis": {
        "normalizer": {
          "my_normalizer": {
            "type": "custom",
            "char_filter": [],
            "filter": [
              "lowercase"
            ]
          }
        }
      }
    }
  },
  "mappings": {
    "dynamic_templates": [
      {
        "strings": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "keyword",
            "ignore_above": 256,
            "normalizer": "my_normalizer"
          }
        }
      }
    ]
  }
}