我想今天获得不同的ip,例如Campaigne =“2” 在sql中: 选择不同的IP 从测试 其中timestamp> =“2016-01-16”...... AND fk_campaign_id =“2”;
这可行,但json验证器输出“重复键,名称应该是唯一的。”
{
"size":0,
"aggs":{
"distinct_ip":{
"cardinality":{
"field":"ip"
}
}
},
"query":{
"range":{
"timestamp":{
"gte":"2016-01-16T00:00:00",
"lt":"2016-01-17T00:00:00"
}
}
},
"query":{
"match":{
"fk_campaign_id":"2"
}
}
}
但是如果我尝试在php中构建这个查询,var_dump($ params)只返回json只有一个“查询”,可能是因为Duplicate键???
{
"size":0,
"aggs":{
"distinct_ip":{
"cardinality":{
"field":"ip"
}
}
},
部分范围不在这里?!?!?
"query":{
"match":{
"fk_campaign_id":"2"
}
}
}
提前致谢。
答案 0 :(得分:1)
在你的json query
中是一个重复的密钥。只要有多个条件,就需要使用bool query。由于您有 AND 条件,因此您需要使用must clause
。这是正确的语法
{
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"gte": "2016-01-16T00:00:00",
"lt": "2016-01-17T00:00:00"
}
}
},
{
"match": {
"fk_campaign_id": "2"
}
}
]
}
},
"size": 0,
"aggs": {
"distinct_ip": {
"cardinality": {
"field": "ip"
}
}
}
}
希望这有帮助!