【问题标题】:Add reusable field type to elasticsearch向 elasticsearch 添加可重用字段类型
【发布时间】:2019-03-10 23:56:47
【问题描述】:

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

例如,我在系统中有一个叫做“关键字”的东西——关键字总是有一个特定的映射——

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

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

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

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

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

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2021-06-13
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多