将可重用字段类型添加到elasticsearch

Yeh*_*sef 6 elasticsearch

是否可以定义自定义字段类型并将该定义重用于多个字段.我正在尝试做类似模板的事情,但我不希望它动态定义.

例如,我在系统中有一些名为"keywords"的东西 - 关键字总是有一个特定的映射 -

'keywords' => [
        'type'                => 'object',
        'properties'          => [
            'id'   => [
                'type' => 'integer'
            ],
            'name' => [
                'type' => 'string',
                'position_offset_gap'=>100,
                'analyzer'=>'my_keyword',
            ]
        ]
    ]
Run Code Online (Sandbox Code Playgroud)

我在整个系统中都有这些 - 帖子,媒体,文件夹等,我有两种非常相似的 - 让我们说关键词和类别.这是相同的定义,我只是出于商业原因将它们分开.

理想情况下,我想要做的是定义一个"关键字"类型,然后我将定义一个字段

'keywords' => [
        'type' => 'keyword'
 ]
Run Code Online (Sandbox Code Playgroud)

或类似的东西.然后,当我想要更改该定义时,我可以在一个地方为所有使用它的字段执行此操作.

这在Elasticsearch中是否可行?我不想使用索引模板,因为我喜欢明确我的映射.

gle*_*ota 0

我建议您使用动态模板+关键字字段的命名约定。在实践中,例如:

(1)定义一个动态模板,将名称以 开头的任何字段映射k_到您的自定义映射

{
  "mappings": {
    "_doc": {
      "dynamic_templates": [
        "keywords": {
          "match": "k_*",
          "mapping": {
            "type": "keyword",
            ...
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

(2)将前缀添加k_到应应用自定义映射的任何字段的名称中(例如,k_post, k_media, ...)

当然,您可以为关键字字段选择任何其他命名约定(例如,,*_keywords k*...)