在elasticsearch中有没有办法知道密钥的数据类型?

kuuvgm7e  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(344)

我面临的问题,如数据类型的关键得到改变。在创建索引时,我将数据类型设置为嵌套的,但由于某些原因,它被更改为对象。我通过无痛脚本进行积垢手术,但这似乎没问题。
弹性版本7.3.0
初始模板:

"settings": {
  "number_of_shards": 1,
},
"mappings" : {
  "properties": {
    "deleted_at": { "type": "date" },
    "updated_at": { "type": "date" },
    "id": { "type": "integer" },
    "user_id": { "type": "integer" },

    ... some more keys

    "user_tags": {
      "type": "nested"
    },
    "user_files": {
      "type": "nested"
    },
  }
}

批量插入/更新后的Map

"mappings" : {
  "properties": {
    "deleted_at": { "type": "date" },
    "updated_at": { "type": "date" },
    "id": { "type": "integer" },
    "user_id": { "type": "integer" },
    "user_tags": {
      "properties": {
        ...some properties
      }
    },
    "user_files": {
      "properties": {
        ...some properties
      }
    },
  }
}

我必须重新索引来解决这个问题,但这种情况经常发生。还有什么方法可以知道键的数据类型是嵌套的还是对象的?
提前谢谢。

dtcbnfnu

dtcbnfnu1#

通过设置 "dynamic": "strict" 您的Map不会更改,也不会插入不合适的文档。要解决这个问题,您需要定义要在嵌套字段中的所有字段。例如:

{
"user_tags": {
            "type": "nested",
            "properties": {
              "code": {
                "type": "keyword",
                "store": true
              },
              "score": {
                "type": "float",
                "store": true
              }

            }
          }
}

如果您只想存储一个列表,可以使用如下Map:

{
    "user_tags": {
            "type": "keyword",
            "store": true
          }
}

在第二个Map中,您可以使用此结果存储用户标记 ["tag1", "tag2", ...]

相关问题