gpt4 book ai didi

arrays - 在 ElasticSearch 中从数组中删除元素/对象,然后匹配查询

转载 作者:行者123 更新时间:2023-12-02 22:22:27 25 4
gpt4 key购买 nike

我有以下类型的文件。

{
"_index": "example1",
"_type": "doc",
"_id": "8036",
"_score": 1,
"_source": {
"user": "kimchy8036",
"postDate": "2009-11-15T13:12:00",
"locations": [
[
72.79887719999999,
21.193036000000003
],
[
-1.8262150000000001,
51.178881999999994
]
]
}
}

下面是映射:
   {
"example1": {
"mappings": {
"doc": {
"properties": {
"locations": {
"type": "geo_point"
},
"postDate": {
"type": "date"
},
"status": {
"type": "long"
},
"user": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}

我可以使用以下查询添加多个位置。
POST /example1/_update_by_query
{
"query": {
"match": {
"_id": "3"
}
},
"script" : {
"lang":"painless",
"inline": "ctx._source.locations.add(params.newsupp)",
"params":{
"newsupp":[-74.00,41.12121 ]
}}
}

但无法从位置删除数组对象。我试过下面的查询但工作。
POST 示例 1/doc/3/_update
{
    "script" :
{
"lang":"painless",
"inline":"ctx._source.locations.remove(params.tag)",
"params":{
"tag":[-74.00,41.12121]
}
}
}

请让我知道我在这里做错了什么。我使用的是弹性版本 5.5.2

最佳答案

不像 add() , remove()需要 元素的索引 并将其删除。
您的 ctx._source.locations在无痛中是 ArrayList .它有 List remove() 方法:

E remove(int index)

Removes the element at the specified position in this list (optional operation). ...


Painless API - List对于其他方法。
this answer例如代码。

关于arrays - 在 ElasticSearch 中从数组中删除元素/对象,然后匹配查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49384199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com