在 Elasticsearch 映射中使用条件

分享于2022年07月17日 elasticsearch elasticsearch-mapping 问答
【问题标题】:在 Elasticsearch 映射中使用条件(Use condition in Elasticsearch mapping)
【发布时间】:2022-01-03 22:08:51
【问题描述】:

我想知道在定义索引的映射时是否可以使用条件,因为根据某个字段的某些值,然后需要其他字段。

例如:

PUT /my-index
{
  "mappings": {
    "properties": {
      "age": { "type": "integer" },  
      "email": { "type": "keyword" }, 
      "name": { "type": "text"  }, 
      "is_external": {"type": "boolean" }
      if [is_external] == true {
        "adress": { "type": "text" },
        "date": { "type": "date" }
      }
    }
  }
}

如果没有办法做到这一点,我该如何处理?


【解决方案1】:

在映射级别进行这种检查是没有意义的,因为最终您的索引将包含具有 is_external: true is_external: false 的两个文档,因此映射还必须包含 address date 文档的字段定义,其中 is_external: true 和每个索引只能有一个映射。

如果您想强制带有 is_external: true 的文档也包含 address date 字段,那么您可以使用摄取管道 with a drop processor 执行此操作:

...
{
  "drop": {
    "if" : "ctx.is_external == true && (ctx.date == null || ctx.address == null)"
  }
}

  • 非常感谢您的回答,我知道我应该使用一些摄取管道的处理器。
  • 太棒了,很高兴我能帮上忙!如果您有任何其他问题,请告诉我们