弹性搜索数组操作
Elastic Search Array Actions
我想在 elasticsearch 索引中有一个字符串数组。假设数组是我最近选择的餐厅列表。每次我去一家新餐厅时,我都会将其添加到我的列表中。我还希望能够找到列表中有特定餐厅的所有用户。
- 如何创建索引来处理这种映射?
- 如何更新餐厅列表?
- 如何查询每个用户的餐厅列表?
我正在使用 ELK v 6.3.0。
回答你的第二个问题,可以使用painless script来实现。这是相同的伪代码
for(int i=0; i<ctx._source.RESTAURANTS.size();i++) {
if(ctx._source.RESTAURANTS[i].ID == params.RESTAURANT_ID) {
ctx._source.RESTAURANTS[i].NAME = params.RESTAURANT_NAME;
break;
}
}
这里的params是一张地图,你把你要更新的餐厅的id放在那里
esClient.prepareUpdate(indexName, type, documentId).setScript(new Script(ScriptType.INLINE, "painless", "replace script here", params)).execute().actionGet()
您也可以编写查询并传递参数
POST restaurant/1/_update
{
"script": {
"lang": "painless",
"inline": "for(int i=0; i<ctx._source.RESTAURANTS.size();i++) { if(ctx._source.RESTAURANTS[i].ID == params.RESTAURANT_ID) { ctx._source.RESTAURANTS[i].NAME = params.RESTAURANT_NAME; break;}}",
"params": {
"RESTAURANT_ID": 16,
"RESTAURANT_NAME": "Updated Name"
}
}
}
这将更新 ID 为 1 的文档,并在嵌套文档中检查 ID 为 16 的餐厅,并使用 "Updated Name"
更新名称
更多关于painless的使用方法,see this
我想在 elasticsearch 索引中有一个字符串数组。假设数组是我最近选择的餐厅列表。每次我去一家新餐厅时,我都会将其添加到我的列表中。我还希望能够找到列表中有特定餐厅的所有用户。
- 如何创建索引来处理这种映射?
- 如何更新餐厅列表?
- 如何查询每个用户的餐厅列表?
我正在使用 ELK v 6.3.0。
回答你的第二个问题,可以使用painless script来实现。这是相同的伪代码
for(int i=0; i<ctx._source.RESTAURANTS.size();i++) {
if(ctx._source.RESTAURANTS[i].ID == params.RESTAURANT_ID) {
ctx._source.RESTAURANTS[i].NAME = params.RESTAURANT_NAME;
break;
}
}
这里的params是一张地图,你把你要更新的餐厅的id放在那里
esClient.prepareUpdate(indexName, type, documentId).setScript(new Script(ScriptType.INLINE, "painless", "replace script here", params)).execute().actionGet()
您也可以编写查询并传递参数
POST restaurant/1/_update
{
"script": {
"lang": "painless",
"inline": "for(int i=0; i<ctx._source.RESTAURANTS.size();i++) { if(ctx._source.RESTAURANTS[i].ID == params.RESTAURANT_ID) { ctx._source.RESTAURANTS[i].NAME = params.RESTAURANT_NAME; break;}}",
"params": {
"RESTAURANT_ID": 16,
"RESTAURANT_NAME": "Updated Name"
}
}
}
这将更新 ID 为 1 的文档,并在嵌套文档中检查 ID 为 16 的餐厅,并使用 "Updated Name"
更新名称更多关于painless的使用方法,see this