如何從 ElasticSearch 的串列型別欄位中洗掉一個元素。
我有一些資料,我想從串列型別欄位中洗掉一些元素。
// The data of user list with book field
[
{
"userId": "1",
"books": [
{
"id": "1",
"name": "book1"
},
{
"id": "2",
"name": "book2"
}
]
},
{
"userId": "2",
"books": [
{
"id": "2",
"name": "book2"
},
{
"id": "3",
"name": "book3"
}
]
},
{
"userId": "13",
"books": [
{
"id": "2",
"name": "book2"
},
{
"id": "5",
"name": "book5"
}
]
}
]
我想做的事:
找到 userId 在 [1, 2, 3] 中的用戶,從他們的書單中洗掉 id 為 2 的書。
預期的結果:
[
{
"userId": "1",
"books": [
{
"id": "1",
"name": "book1"
}
]
},
{
"userId": "2",
"books": [
{
"id": "3",
"name": "book3"
}
]
},
{
"userId": "13",
"books": [
{
"id": "2",
"name": "book2"
},
{
"id": "5",
"name": "book5"
}
]
}
]
我是 ElasticSearch 的新手,這對我來說是一個非常困難的問題。如果能提供Curl命令的請求命令就更好了。
uj5u.com熱心網友回復:
您可以使用下面的 update_by_query 查詢和無痛腳本。
POST book/_update_by_query
{
"query": {
"match_all": {}
},
"script": {
"source": """
for (int i = 0; i < ctx._source.booklist.length; i)
{
if(params.userid.contains(ctx._source.booklist[i]['userId']))
{
for (int j = 0; j < ctx._source.booklist[i]['books'].length; j)
{
if(ctx._source.booklist[i]['books'][j]["id"]=="2"){
ctx._source.booklist[i]['books'].remove(j);
}
}
}
}""",
"lang": "painless",
"params": {
"userid":["1","2","3"]
}
}
}
以下是執行上述查詢之前的檔案:
{
"_index" : "book",
"_type" : "_doc",
"_id" : "aA1Vd34BATX2P1U_9ugg",
"_score" : 1.0,
"_source" : {
"booklist" : [
{
"userId" : "1",
"books" : [
{
"id" : "1",
"name" : "book1"
},
{
"id" : "2",
"name" : "book2"
}
]
},
{
"userId" : "2",
"books" : [
{
"id" : "2",
"name" : "book2"
},
{
"id" : "3",
"name" : "book3"
}
]
},
{
"userId" : "13",
"books" : [
{
"id" : "2",
"name" : "book2"
},
{
"id" : "5",
"name" : "book5"
}
]
}
]
}
}
以下是執行上述查詢后的檔案:
{
"_index" : "book",
"_type" : "_doc",
"_id" : "aA1Vd34BATX2P1U_9ugg",
"_score" : 1.0,
"_source" : {
"booklist" : [
{
"books" : [
{
"name" : "book1",
"id" : "1"
}
],
"userId" : "1"
},
{
"books" : [
{
"name" : "book3",
"id" : "3"
}
],
"userId" : "2"
},
{
"books" : [
{
"name" : "book2",
"id" : "2"
},
{
"name" : "book5",
"id" : "5"
}
],
"userId" : "13"
}
]
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/416982.html
標籤:
