使用自定义标准化器作为 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"
}
}
}
]
}
}
我想在 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"
}
}
}
]
}
}