复杂的查询:
下面的查询是小编自己研究写的一个比较复杂,的语句。涉及到查query ,bool must,已经过滤条件term
关键词介绍
from : 表示从第几条开始返回
size: 表示返回的题目数大小。
query :查询语句
bool 、must、 should 是拼接sql中的where条件,bool 、must组合表示 and,bool 、should 组合表示 or。
range: 范围查询语句,在本语句中我们只使用了小于 “lte”,大于 "gte"也可以将小于大于写到一个range内对一个数据的范围进行筛选。
aggs是对数据进行聚合,本示例中的我们实行的是对复杂对象(nested)的聚合操作。
其中group的格式为
{
id:1,
name:“myname”,
group:[{id:1,name:1},{id:2,name:2},{id:13,name:13}]
}
GET /my_index/_search
{
"from": 0,
"size": 1,
"query": {
"bool": {
"must": [
{
"term": {
"time": {
"value": "2019-01-10 12:15:00"
}
}
},
{
"bool": {
"should": [
{
"range": {
"wireless_ss_1_rate": {
"lte": 0.9
}
}
},
{
"range": {
"wireless_cll_rate": {
"gte": 0.015
}
}
},
{
"range": {
"erab_dr_1_rate": {
"gte": 0.015
}
}
},
{
"range": {
"uppktlo_rate": {
"gte": 0.015
}
}
},
{
"range": {
"uppktlos_rate": {
"gte": 0.015
}
}
},
{
"range": {
"ho_s_rate": {
"lte": 0.9
}
}
},
{
"range": {
"wireless_ac_rate": {
"lte": 0.95
}
}
},
{
"range": {
"ulprbmea_rate": {
"gte": 0.7
}
}
},
{
"range": {
"dlprbmea_rate": {
"gte": 0.7
}
}
},
{
"range": {
"effectivemean": {
"gte": 50
}
}
},
{
"range": {
"effectivemax": {
"gte": 50
}
}
},
{
"range": {
"ho_succ_qci1_rate": {
"lte": 0.9
}
}
},
{
"range": {
"ulmeannl_avg": {
"gte": -105
}
}
},
{
"range": {
"outgeran_rate": {
"lte": 0.9
}
}
}
]
}
}
]
}
},
"aggs": {
"aggs_group": {
"nested": {
"path": "group"
},
"aggs": {
"duration_ranges": {
"terms": {
"field": "group.id",
"size": 100000
// size 设置返回聚合的条目数,默认是10条。
}
}
}
}
}
,
"_source": ["my_col"]
}
注意集合时候需要将被聚合对象的fielddata属性是否开,该属性作用是1.懒加载,2.聚合时候可以把数据放入缓存来加快计算速度:
1.一般对象释放fielddata属性
#释放name
PUT /my_index/_mapping/_doc
{
"properties": {
"name": {
"type": "text",
"fielddata": true
}
}
}
2.复杂对象(nested对象)释放fielddata属性
#释放cell_group.id
PUT /tpa_eutrancell_q_2019.01.10/_mapping/_doc
{
"properties": {
"group": {
"type": "nested",
"properties": {
"id": {
"type": "text",
"fielddata": true
}
}
}
}
}
上面的语句是正确可以执行的。欢迎各位大家给予意见。