java - 使用 Java API 根据条件更新 ElasticSearch 文档
问题描述
我有一个弹性搜索索引(让我们将其命名为学生)。我有田野
{ "name","division" ,"class" , "studentRollNo"} .
是否可以更新名称为 "ABC" 的记录的弹性搜索索引。使用 update API 我只能通过 id 更新它,使用 Update with query 如何传递 jsonString 。可以说我用于更新的 json 字符串是
现存的 :
{“姓名”:“abc”,“师”:“D”,“班级”:10,“学生卷号”:23}
更新 :
{"name":"abc" , "division" : A , "class" : 11 , "studentRollNo" : 23}
解决方案
我不确定您使用的是哪个 elasticsearch 版本,但下面是 ES 7.13 版本的代码片段。
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
UpdateByQueryRequest request = new UpdateByQueryRequest("student");
request.setQuery(new TermQueryBuilder("name", "abc"));
// This data map you can directly create from JSON string as well.
Map<String, Object> data = new HashMap<String, Object>();
data.put("name", "abc");
data.put("division", "A");
data.put("class", 11);
data.put("studentRollNo", 23);
Map<String, Object> param = new HashMap<String, Object>();
param.put("data", data);
// script will read data param value and assign to document source
String source = "ctx._source=params.data";
Script script = new Script(ScriptType.INLINE, "painless", source, param);
request.setScript(script);
client.updateByQuery(request, RequestOptions.DEFAULT);
client.close();
以下是查询 rest API json 的等效更新:
POST student/_update_by_query
{
"query": {
"term": {
"name": {
"value": "abc"
}
}
},
"script": {
"source": "ctx._source=params.data",
"params": {
"data": {
"name": "abc",
"division": "A",
"class": 11,
"studentRollNo": 23
}
}
}
}
推荐阅读
- javascript - 如何编写一个返回对象所有值的数组的函数
- php - 如何获取带有偏移量和限制的predis数据?
- javascript - 如何在 Javascript 中获取 SalesForce 选项列表依赖映射
- python - Flask-Migrate 未检测到表
- data-structures - 为什么交联的 defstructs 会导致堆栈溢出?
- reactjs - React Native,Redux:获取更多/加载更多
- java - 从 .jar 到可导入包...如何?
- c# - 如何自定义 ASP.Net Core 模型绑定错误?
- javascript - 带有 microsoft graph javascript sdk 的多部分 HTTP 请求
- c# - UWP XAML NavigationMenu 更改行为