是否可以定义自定义字段类型并将该定义重用于多个字段。我正在尝试做类似模板的事情,但我不希望它动态定义。
例如,我在系统中有一些名为“keywords”的东西 - 关键字总是有一个特定的映射 -
'keywords' => [
'type' => 'object',
'properties' => [
'id' => [
'type' => 'integer'
],
'name' => [
'type' => 'string',
'position_offset_gap'=>100,
'analyzer'=>'my_keyword',
]
]
]
我在整个系统中都有这些 - 帖子,媒体,文件夹等,我有两种非常相似的 - 让我们说关键词和类别。这是相同的定义,我只是出于商业原因将它们分开。
理想情况下,我想要做的是定义一个“关键字”类型,然后对于我要定义的字段
'keywords' => [
'type' => 'keyword'
]
或类似的东西。然后,当我想要更改该定义时,我可以在一个地方为所有使用它的字段执行此操作。
这在Elasticsearch中是否可行?我不想使用索引模板,因为我喜欢明确我的映射。
答案 0 :(得分:0)
我建议您对关键字字段使用dynamic templates +命名约定。实际上,例如:
(1)定义一个动态模板,该模板将名称以k_
开头的任何字段映射到您的自定义映射
{
"mappings": {
"_doc": {
"dynamic_templates": [
"keywords": {
"match": "k_*",
"mapping": {
"type": "keyword",
...
}
}
]
}
}
}
(2)将k_
前缀添加到应应用自定义映射的任何字段的名称(例如k_post
,k_media
,.. )
当然,您可以为关键字字段选择其他任何命名约定(例如*_keywords
k*
,...)