数组分页查询
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"
}
}
}
}
}