【问题标题】:Elasticsearch multiple queriesElasticsearch 多个查询
【发布时间】:2016-04-22 06:55:13
【问题描述】:

我想获得不同的 ip,例如今天和 wherecampaigne="2" 在 sql 中: 选择不同的ip 从测试 其中时间戳 >= "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,可能是因为重复键???

{  
   "size":0,
   "aggs":{  
      "distinct_ip":{  
         "cardinality":{  
            "field":"ip"
         }
      }
   },

范围的部分不在这里?!?!?

   "query":{  
      "match":{  
         "fk_campaign_id":"2"
      }
   }
}

提前致谢。

【问题讨论】:

    标签: php json elasticsearch


    【解决方案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"
          }
        }
      }
    }
    

    希望这会有所帮助!

    【讨论】:

    • 您能推荐任何有关 Elasticsearch 的文献吗?坦克
    • 关于 ES 最重要的事情之一是它的数据结构,即inverted indexanalysis processinternals,该链接还包含指向其他论文的链接。这是 IMO 的一个很好的起点。
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多