如何在不存在的属性中插入属性?

时间:2018-07-20 20:16:14

标签: python elasticsearch

我正在尝试在python上使用批量将属性插入名为“用户”的文档中。

赞:

    actions = [
        {
            '_op_type': 'update',
            "_index": index,
            "_type": "users",
            "_id": s['id_user'],
            "doc": {
                "purchases": []
            },
        }
        for i, s in users.iterrows()
    ]
    success, failure = self.db.bulk(actions, stats_only=True)

如何添加不存在的购买内容?在这种情况下,我不希望出现问题。如果该值已被索引,则禁止更改。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用脚本化的ups来做到这一点,例如:

actions = [
    {
        '_op_type': 'update',
        "_index": index,
        "_type": "users",
        "_id": s['id_user'],
        "script": {
          "source": "ctx._source.purchases = ctx._source.purchases ?: params.purchases",
          "params": {
            "purchases": []
          }
        },
        "scripted_upsert": true,
        "upsert": {}
    }
    for i, s in users.iterrows()
]
success, failure = self.db.bulk(actions, stats_only=True)

purchases数组仅在源中尚未定义的情况下才会与params中的数组一起分配。