Elasticsearch多个查询

时间:2016-01-16 21:02:39

标签: php json elasticsearch

我想今天获得不同的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"
      }
   }
}

提前致谢。

1 个答案:

答案 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"
      }
    }
  }
}

希望这有帮助!