悟空,拿我的打狗棒来

Es 根据数组长度查询

Elasticsearch | 作者 TinaZhou | 发布于2019年09月24日 | 阅读数:14350

现有一需求,根据数组长度进行搜索,筛选 字段 term:[ 0,1,3,4], 长度length 小于等于3的数据,求指教
已邀请:

trycatchfinal

赞同来自: TinaZhou

最好的办法是:添加一个字段代表数组长度

ziyou - 一个学习ELK的Java程序员

赞同来自: TinaZhou

你可以试试下面这个script语句,我的是是可以实现简单数组的查询的
{
"query": {
"bool": {
"filter": {
"script": {
"script": "doc['materials'].values.length > 3"
}
}
}
},
"size": 100
}

 

ziyou - 一个学习ELK的Java程序员

赞同来自: TinaZhou

是因为mapping的原因,你这里的mapping使用的是object 而不是nested,这里可以查看参考文档:nested
基于你存储的是object的格式,你可以使用一个确保每个material里都有的字段,例如id,然后使用以下查询语句即可实现查询:
{
"query": {
"bool": {
"filter": {
"script": {
"script": "doc['materials.id.keyword'].values.length > 1"
}
}
}
},
"size": 100
}
这个是我亲测的,是可以实现你的需求的,望采纳。

TinaZhou

赞同来自:

数据结构如下:例如搜索 materials.length<3 的所有数据{"_index": "hv-advertisement-ol",
"_type": "advertisement",
"_id": "3914898cba827c9e914b45388a71e235104686001",
"_version": 1,
"_score": 1,
"_source": { 
"adFormallyType": null,
"adFormallyTypes": null,
"adFoundCount": 2,
"adFoundDays": 1,
"adTimeEnd": 1537435234356,
"adTimeStart": 1537434168000,
"add": false,
"appId": null,
"appName": null,
"bizer": "e中信",
"createTime": 1537435163958,
"days": [ 
1537435234356
],
"description": null,
"exposureUrl": null,
"fluxId": "2000",
"fluxIds": [ 
"2000"
,
"2001"
],
"fluxName": "今日头条",
"hideApp": null,
"iconId": null,
"iconUrl": null,
"id": "3914898cba827c9e914b45388a71e235104686001",
"industry": null,
"key": "104686001",
"locationUrl": "https://creditcard.ecitic.com/ ... ot%3B,
"locationUrlEncrypted": "129ee4b03c4bed5343a5bcb0be42cf29",
"materialCount": 1,
"materials": [ 



"coverId": null,
"coverUrl": null,
"createTime": null,
"exposureUrl": null,
"groupId": null,
"height": "1786",
"id": "205604837",
"link": "https://image-c-dev.weimobwmc. ... ot%3B,
"linkOriginal": "https://file.adbug.cn/m/image/ ... ot%3B,
"linkOriginalEncrypted": null,
"materialType": 11,
"mediaId": "205604837",
"ocrTxt": null,
"size": "298061",
"updateTime": null,
"width": "1242"
}
],
"promoteType": null,
"realFluxName": "今日头条",
"sourcePlatform": 6,
"sourcePlatformName": "www.adbug.cn",
"sourcePlatformNameStatic": "www.adbug.cn",
"title": "出差还能这么轻松?",
"updateTime": 1537435234356
}}

TinaZhou

赞同来自:

根据官网的查询方法筛选,并没有效果 ,

shwtz - 学物理想做演员的IT男

赞同来自:

不同版本语法有差异,你试试 doc['field'].value.length() > 1
 

要回复问题请先登录注册