elasticsearch - 如何使用Java在Elasticsearch中从文档中删除与模式匹配的字段?

标签 elasticsearch elasticsearch-java-api

我已经检索了一些文档,并在elasticsearch中创建了索引。我用感觉来查询:

这是我在elasticsearch中的查询:

POST /index/_update_by_query
{
  "script": {
    "inline": "ctx._source.remove(\"home\")"
  },
  "query": {
        "wildcard": {
          "url": {
            "value": "http://search.com/*"
    }
  }
}

}

这是我的Java程序:
 Client client = TransportClient.builder().addPlugin(ReindexPlugin.class)
        .build().addTransportAddress(new InetSocketTransportAddress(
            InetAddress.getByName("127.0.0.1"), 9300));

    UpdateByQueryRequestBuilder ubqrb = UpdateByQueryAction.INSTANCE
        .newRequestBuilder(client);

    Script script1 = new Script("ctx._source.remove" +FieldName);

    BulkIndexByScrollResponse r = ubqrb.source("index").script(script1)
        .filter(wildcardQuery("url", patternvalue)).get();

FieldName(将主页另存为字符串)是要从文档中删除的字段的名称。 patternvalue是存储模式“http://search.com/ *”的位置。当我运行此Java程序时,它不会从文档中删除home字段。它在我的文档中添加了一个名为remove的新字段。我可能会缺少一些东西。任何帮助,将不胜感激

最佳答案

如果FieldName是字符串home,则表达式"ctx._source.remove" +FieldName将等于"ctx._source.removehome",这不是正确的脚本。该行的正确代码是:

Script script1 = new Script("ctx._source.remove(\"" + FieldName + "\")");

这样,脚本将是:
ctx._source.remove("home")

这与您在json中编写的相同:
"inline": "ctx._source.remove(\"home\")"

(该json中的\"只是json语法中转义的")

关于elasticsearch - 如何使用Java在Elasticsearch中从文档中删除与模式匹配的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577708/

相关文章:

elasticsearch - ElasticSearch更新API-添加以@符号开头的字段名

python - ElasticSearch导入错误: cannot import name 'Mapping' from 'elasticsearch.compat'

java - 如何使用 Elasticsearch Node Client Java 连接到远程服务器

Elasticsearch 7.x 断路器 - 数据过大 - 故障排除

java - Elasticsearch Must_not 不使用过滤器子句

elasticsearch - Elasticsearch Java API获取术语聚合的平均值

elasticsearch - 为什么图标标识的字段是 '?'而不是像官方示例一样的 't'?

elasticsearch - Elasticsearch 根据条件聚合到存储桶中

elasticsearch - Elasticsearch查找日期使用范围查询相交和内部

elasticsearch - 如何在ElasticSearch DeleteByQuery Java API中添加URL参数?