【问题标题】:Delete field in doc using spring esTemplate使用spring esTemplate删除文档中的字段
【发布时间】:2020-03-01 19:27:19
【问题描述】:

我正在尝试使用ElasticsearchTemplate来更新我的es数据,代码如下:

UpdateRequest updateRequest = new UpdateRequest();
            updateRequest.index(RiskViewDevStatistics.ESIndex);
            updateRequest.type(RiskViewDevStatistics.ESType);
            try {
                updateRequest.doc(XContentFactory.jsonBuilder().startObject()
                        .field("owner", ownerId)
                        .endObject());
                UpdateQuery updateQuery = new UpdateQueryBuilder().withId("docId")
                        .withClass(RiskViewDevStatistics.class).withUpdateRequest(updateRequest).build();
                esTemplate.update(updateQuery);

代码类似:

update owner from xx where id = xx

当我传入的参数ownerId为null时,es中的数据为:

"hits": {
        "total": 1,
        "max_score": 1.0,
        "hits": [
            {
                "_index": "st-riskview",
                "_type": "riskviewdevstatistics",
                "_id": "AW47Wy7cEY_O-MqaGSGL",
                "_score": 1.0,
                "_source": {
                    "owner": null  // null
                }
            }
        ]
    }

我的问题是: 如何删除该字段而不是设置为空?

注意:我不想替换total doc。

【问题讨论】:

    标签: java elasticsearch spring-data-elasticsearch elasticsearch-template


    【解决方案1】:

    试试这个:

    POST st-riskview/riskviewdevstatistics/AW47Wy7cEY_O-MqaGSGL/_update
    {
      "script" : "ctx._source.remove('owner')"
    }
    

    弹簧 - 未测试

    UpdateRequest updateRequest = new UpdateRequest(RiskViewDevStatistics.ESIndex,RiskViewDevStatistics.ESType,"docid");
    Map<String, Object> parameters = singletonMap("field", "owner");
    Script inline = new Script(ScriptType.INLINE, "painless", "ctx._source.remove(params.field)",parameters);  
    updateRequest.script(inline);
    

    Updates with a script

    【讨论】:

    • 报错:java.lang.IllegalArgumentException: script_lang not supported [painless].这和我的es版本2.4有什么关系
    • 在我将 script.engine.groovy.inline.update: on 添加到我的 elasticsearch.yml 后它可以工作
    猜你喜欢
    • 2018-04-09
    • 2019-11-25
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2020-09-11
    • 2023-04-09
    相关资源
    最近更新 更多