ElasticSearch:查询筛选器不使用脚本?

14ifxucb  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(68)

基本上,我试图得到record_created_at日期,其中一天是星期一
我在下面写了scriptquery

查询:

{
    "_source": "false",
    "query": {
        "bool": {
          "must": [
            {
              "script": {
                "script": "doc['record_created_at'].value.getDayOfWeek() == 1"
              }
            }
          ]
        }
    },
    "aggs": {
        "record_created_at_agg": {
            "date_histogram": {
                "field": "record_created_at",
                "calendar_interval": "day",
                "format": "yyyy-MM-dd"
            }
        }
    },
    "fields": [
        "record_created_at"
    ],
    "size": 10000
}

字符串
但是我得到的响应没有在query中应用过滤器,如下所示:

回复

...
"aggregations": {
    "record_created_at_agg": {
      "buckets": [
        {
          "key_as_string": "2023-05-08",
          "key": 1683504000000,
          "doc_count": 4
        },
        {
          "key_as_string": "2023-05-09",
          "key": 1683590400000,
          "doc_count": 0
        },
        {
          "key_as_string": "2023-05-10",
          "key": 1683676800000,
          "doc_count": 0
        },
...


我还尝试了另一个过滤器在querymatch

{
    "_source": "false",
    "query": {
        "bool": {
          "must": [
            {
              "match": {
                "record_created_at": "2023-05-08T16:14:58.000Z"
              }
            }
          ]
        }
    },
    "aggs": {
        "filtered_dates": {
            "date_histogram": {
                "field": "record_created_at",
                "calendar_interval": "day",
                "format": "yyyy-MM-dd"
            }
        }
    },
    "fields": [
        "record_created_at"
    ],
    "size": 10000
}


按预期获得响应,如下所示

回复2

"aggregations": {
    "record_created_at_agg": {
      "buckets": [
        {
          "key_as_string": "2023-05-08",
          "key": 1683504000000,
          "doc_count": 1
        }
      ]
    }
  }
}


我做错什么了吗?

xiozqbni

xiozqbni1#

第一个响应在技术上是正确的,因为您在5月9日(星期二)和10日(星期三)得到0个文档。
您可以将min_doc_count添加到date_histogram聚合中,以便只获取星期一的存储桶

{
    "_source": "false",
    "query": {
        "bool": {
          "must": [
            {
              "script": {
                "script": "doc['record_created_at'].value.getDayOfWeek() == 1"
              }
            }
          ]
        }
    },
    "aggs": {
        "record_created_at_agg": {
            "date_histogram": {
                "field": "record_created_at",
                "calendar_interval": "day",
                "format": "yyyy-MM-dd",
                "min_doc_count": 1               <------ add this
            }
        }
    },
    "fields": [
        "record_created_at"
    ],
    "size": 10000
}

字符串

相关问题