Tôi đã được yêu cầu để loại bỏ đối tượng từ mảng thỏa mãn điều kiện, tôi có thể cập nhật các đối tượng của mảng trên cơ sở điều kiện, đó là như sau:loại bỏ các đối tượng từ mảng tìm kiếm đàn hồi
PUT twitter/twit/1
{"list":
[
{
"tweet_id": "1",
"a": "b"
},
{
"tweet_id": "123",
"a": "f"
}
]
}
POST /twitter/twit/1/_update
{"script":"foreach (item :ctx._source.list) {
if item['tweet_id'] == tweet_id) {
item['new_field'] = 'ghi';
}
}",
"params": {tweet_id": 123"}
}
này đang làm việc
cho remove tôi đang làm điều này
POST /twitter/twit/1/_update
{ "script": "foreach (item : ctx._source.list) {
if item['tweet_id'] == tweet_id) {
ctx._source.list.remove(item);
}
}",
"params": { tweet_id": "123" }
}
nhưng điều này không làm việc và đưa ra lỗi này,
ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; Error: ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException
tôi có thể loại bỏ toàn bộ mảng hoặc toàn bộ lĩnh vực sử dụng
"script": "ctx._source.remove('list')"
Tôi cũng có thể loại bỏ đối tượng từ mảng bằng cách xác định tất cả các phím của một đối tượng sử dụng
"script":"ctx._source.list.remove(tag)",
"params" : {
"tag" : {"tweet_id": "123","a": "f"}
nút của tôi phiên bản tìm kiếm đàn hồi của mô-đun là 2.4.2 máy chủ tìm kiếm đàn hồi là 1.3.2
Cảm ơn Andrei Stefan, Đây là làm việc, nếu danh sách chứa chỉ có một đối tượng của tweet_id = 123 , nhưng điều này không làm việc, nếu tôi muốn loại bỏ nhiều đối tượng có cùng tweet_id = 123, những gì tôi đã yêu cầu để làm cho điều đó ??? –
Vâng, thật dễ dàng. Xem phản hồi được cập nhật của tôi. –
Ngoài ra, tôi sẽ đánh giá cao nếu bạn có thể upvote câu trả lời. –