ElasticSearch仅在范围内嵌套日期且超过X次时返回

时间:2017-08-31 16:00:04

标签: elasticsearch nested

我正在尝试编写一个查询,如果它们在特定数据范围内具有X个访问次数,则只返回文档。即如果它有2次访问,则只返回guid-docA,在2017-01-01"和" 2017-12-31"

 **Example Data Documents**
 {
  "_id": "guid-docA"
  "visits": [
        {
          "name": "Sarah",
          "visitDate": "2013-02-27T00:00:00.000Z"
        },
        {
          "name": "John",
          "visitDate": "2017-02-27T00:00:00.000Z"
        },
        {
          "name": "Jim",
          "visitDate": "2017-12-27T00:00:00.000Z"
        }
  ]
 },
 {
  "_id": "guid-docB"
  "visits": [
        {
          "name": "Brian",
          "visitDate": "2013-02-27T00:00:00.000Z"
        },
        {
          "name": "Kerri",
          "visitDate": "2016-02-27T00:00:00.000Z"
        },
        {
          "name": "Julia",
          "visitDate": "2017-12-27T00:00:00.000Z"
        }
  ] 
 }         

我已经尝试过脚本过滤器,并且如果访问次数大于2,则可以返回数据但是如果他们在给定年份中访问次数超过1(或X),我还没想出如何获取数据。

"filter": {
    "script": {
      "script": "_source.visits.size() > 1"
    }
  }

不确定如何为指定的数量应用逻辑。

先谢谢你。

1 个答案:

答案 0 :(得分:0)

首先,您需要确保visits字段为nested Nested datatype

如果是这样,您可以使用嵌套的bool查询must子句和minimum_shold_mathc

像这样的东西

  "query": {
    "nested": {
     "path": "visits",
     "query": {
       "bool": {
         "must": [
         {
          "range": {
            "visits.visitDate": {
              "gte": "2017-01-01",
              "lte": "2017-12-31"
             }
           }
         }
       ],
       "minimum_number_should_match": 2
     }
   }
  }
}