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

时间:2015-02-15 09:44:17

标签: elasticsearch

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

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

'keywords' => [
        'type'                => 'object',
        'properties'          => [
            'id'   => [
                'type' => 'integer'
            ],
            'name' => [
                'type' => 'string',
                'position_offset_gap'=>100,
                'analyzer'=>'my_keyword',
            ]
        ]
    ]

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

理想情况下,我想要做的是定义一个“关键字”类型,然后对于我要定义的字段

'keywords' => [
        'type' => 'keyword'
 ]

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

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

1 个答案:

答案 0 :(得分:0)

我建议您对关键字字段使用dynamic templates +命名约定。实际上,例如:

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

{
  "mappings": {
    "_doc": {
      "dynamic_templates": [
        "keywords": {
          "match": "k_*",
          "mapping": {
            "type": "keyword",
            ...
          }
        }
      ]
    }
  }
}

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

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