Elasticsearch:是否可以在映射中引用属性?

我在Elasticsearch-6中有一个简单的映射,就像这样。

{
  "mappings": {
    "_doc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },"fields": {
          "properties": {
            "meta": {
              "properties": {
                "task": {
                  "properties": {
                    "field1": {
                      "type": "keyword"
                    },"field2": {
                      "type": "keyword"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

现在我必须向其添加另一个属性-tasks,它只是已经定义的task属性的数组。

有没有办法引用task的属性,这样我就不必重复所有属性了?像这样:

{
  "fields": {
    "properties": {
      "meta": {
        "properties": {
          "tasks": {
            "type": "nested","properties": "fields.properties.meta.properties.task"
          },"task": {
            ...
          }
        }
      }
    }
  }
}
snow6298 回答:Elasticsearch:是否可以在映射中引用属性?

您只能将task字段用作task对象的数组,不能单独查询它们。如果您的目标是实现这一目标(如第二个示例所示),则将“嵌套”数据类型直接设置到task字段的映射中-那么,是的,您需要重新索引。

我无法想象一个用例,在这种情况下,您需要在两个字段中重复相同的对象数组,一个嵌套,另一个不嵌套。

编辑

以下,基于评论中的讨论,一些注意事项/建议:

  • 一个字段可以具有一个值或一组值。在您的情况下,您的任务字段可以具有一个任务对象或一组任务对象。如果您打算独立地查询任务的对象(当然,如果它们不止一个),则只需要设置任务的“嵌套”数据类型即可。
  • 我建议您以一种避免在第一时间重复信息的方式来设计文档。重复的信息将使您的文档更大,处理起来更复杂,从而导致更高的存储要求和更慢的查询速度
  • 如果无法重新设计文档映射,则可以检查alias datatypes是否可以帮助您避免某些重复。
  • 如果无法重新设计文档映射,则可以检查dynamic templates是否可以帮助您避免某些重复
本文链接:https://www.f2er.com/3132326.html

大家都在问