java - 需要 Elastic Search 高级 Java 客户端 UpdateByQueryRequest API 帮助
问题描述
我正在从普通的 ES Http 调用迁移到 ES HighLevelJavaClient。
我想转换这个旧的实现 POST / _update_by_query
{
"script": {
"inline": "ctx._source.collibra_match_for = []"
},
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": "doc['collibra_match_for.keyword'].values.length > 0",
"lang": "painless"
}
}
}
}
}
}
到高级客户端代码。
我试过的代码是:
UpdateByQueryRequest request = new UpdateByQueryRequest();
request.setConflicts("proceed");
request.setQuery(QueryBuilders.boolQuery().filter(QueryBuilders.scriptQuery(new Script("doc['collibra_match_for.keyword'].values.length > 0"))));
request.setScript(new Script(ScriptType.INLINE, "painless","ctx._source.collibra_match_for = []",Collections.emptyMap()));
request.setRefresh(true);
try {
BulkByScrollResponse bulkResponse = esClient.updateByQuery(request, RequestOptions.DEFAULT);
long totalDocs = bulkResponse.getTotal();
} catch (IOException e) {
e.printStackTrace();
}
}
但我收到此错误:
Elasticsearch exception [type=exception, reason=Incorrect HTTP method for uri [/_update_by_query?requests_per_second=-1&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&refresh=true&conflicts=proceed&timeout=1m] and method [POST], allowed: [DELETE, PUT, GET, HEAD]]
任何帮助将不胜感激 :)
解决方案
这个问题我居然找到了答案。。我们只需要在构造函数中添加索引名称即可。这是问题的最终答案。希望将来对某人有用:)
UpdateByQueryRequest request = new UpdateByQueryRequest(INDEX_NAME);
request.setConflicts("proceed");
request.setQuery(QueryBuilders.boolQuery().filter(QueryBuilders.scriptQuery(new Script("doc['collibra_match_for.keyword'].values.length > 0"))));
request.setScript(new Script(ScriptType.INLINE, "painless","ctx._source.collibra_match_for = []",Collections.emptyMap()));
request.setRefresh(true);
try {
BulkByScrollResponse bulkResponse = esClient.updateByQuery(request, RequestOptions.DEFAULT);
long totalDocs = bulkResponse.getTotal();
} catch (IOException e) {
e.printStackTrace();
}
推荐阅读
- dataframe - 如何根据其他列的条件用另一列的值填充 pyspark 数据框中的列
- java - 如何正确同步两个线程
- python-3.x - 使用递归进行网络抓取 - 将返回函数放在哪里
- android-layout - 当其他文本视图垂直扩展时,如何使文本视图始终显示在屏幕上?
- c# - xml 子元素节点或属性值
- kubernetes - Pod 内网 HTTPS 请求失败
- vue.js - 如何解决 Vue.js 中的“相邻 JSX 元素必须包含在封闭标记中”问题
- jhipster - 如何在 jHipster 中获取当前用户?
- xamarin - 我可以仅使用 Xamarin 创建 Android 应用吗
- android - 如何在相机预览打开时(以编程方式)保持手电筒开启