0

我想在弹性搜索中使用不区分大小写的排序。但是 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

我的主要目标是,我们在这个 mapping.yaml 中添加的每个新文本字段(该索引中的每个新文本/关键字文件)都应该默认使用规范化器。

4

2 回答 2

1

您可以利用动态模板来实现您想要的。使用映射创建索引模板,如下所示:

 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"
          }
        }
      }
    ]
  }
}
于 2021-12-29T04:43:40.187 回答
0

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

从文档

索引模板允许您定义将在创建新索引时自动应用的模板。模板包括设置和映射以及控制是否应将模板应用于新索引的简单模式模板。

于 2020-11-27T13:56:26.793 回答