1

我爬了几个文档并在弹性搜索中创建了一个索引。我正在使用 sense 来查询:

这是我在弹性搜索中的查询:

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(home 保存为字符串)是我要从文档中删除的字段的名称。patternvalue 是存储模式“ http://search.com/ *”的位置。当我运行这个 Java 程序时,它不会从我的文档中删除 home 字段。它在我的文档中添加了一个名为 remove 的新字段。我可能会遗漏一些东西。任何帮助,将不胜感激

4

1 回答 1

0

如果 FieldName 是 string home,那么表达式"ctx._source.remove" +FieldName将等于"ctx._source.removehome"which 不是正确的脚本。该行的正确代码是:

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

这样脚本将是:

ctx._source.remove("home")

这和你在 json 中写的一样:

"inline": "ctx._source.remove(\"home\")"

\"在那个json只是"json语法中的转义)

于 2018-03-06T04:14:31.627 回答