ElasticSearch对数组字段中数据的增删改以及分页查询

 

数组分页查询


GET rtb4free/_search
{
    "_source": false,
    "query": {
        "term": {
            "_id": "cA1f3WoBN-usggp0sL3Z"
        }
    },
    "script_fields": {
        "filterData": {
            "script": {
                "lang": "painless",
                "source": """
                    ArrayList person=new ArrayList();
                    for(int i=params.start;i<params.end;i++){
                      try{
                         person.add(doc['lists.filterList'][i]);
                      }catch(Exception e){
                       return person; 
                      }
                    }
                    return person;
                """,
                "params": {
                  "start": 0,
                  "end": 10
              }
            }
            
        }
    }
}

数组是否存在该条数据


GET rtb4free/_search
{
    "_source": true,
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "_id": "883UxGoBSPsGBx6_q2hI"
                    }
                },
                {
                    "match_phrase": {
                        "lists.filterList": "test01.com"
                    }
                }
            ]
        }
    }
}

ctx._source用来更新数据
数组中添加值


POST rtb4free/_update/Yw0f3WoBN-usggp0Lb0E/
{
   "script" : {
       "source": """
       List filterList=params.filterList;
       for(int i=0;i<filterList.size();i++){
          ctx._source.lists.filterList.add(filterList[i])
       }
       """,
       "params" : {
          "filterList" : ["test01.com","test02.com","test03.com","test04.com"]
       }
   }
}

删除数组中的值


POST rtb4free/_update/Yw0f3WoBN-usggp0Lb0E/
{
   "script" : {
       "source":  """
        List filterList = params.filterList;
        for (int i = 0; i < filterList.size(); i++) {
            try {
                List filters = ctx._source.lists.filterList;
                for (int j = 0; j < filters.length; j++) {
                    if (filters[j] == filterList[i]) {
                        ctx._source.lists.filterList.remove(j);
                    }
                }
            } catch (Exception e) {

            }
        }
       """,
       "params" : {
          "filterList" : ["test01.com","test02.com","test18385.com"]
       }
   }
}

修改数组中的值


POST rtb4free/_update/883UxGoBSPsGBx6_q2hI/
{
  "script":{
    "source":"ctx._source.lists.filterList[ctx._source.lists.filterList.indexOf(params.tag)] = params.new_tag",
    "params" : {
          "tag" : "test02.com",
          "new_tag" : "test01.com"
       }
  }
}

 

查询数组总数


#"source": "doc['lists.filterList'].length"
#"source": "params._source.lists.filterList.size()"
GET rtb4free/_search
{
  "size":0,
  "query": {
        "term": {
            "_id": "YA3P1GoBN-usggp02b1K"
        }
   },
  "aggs": {
    "productNum": {
      "sum": {
        "script": {
          "lang": "painless",
          "source": "doc['lists.filterList'].length"
        }
      }
    }
  }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值