Elastic Search:查询过滤器不适用于脚本?

问题描述 投票:0回答:1

基本上我正在尝试获取

record_created_at
日期,其中当天是星期一

我在

script
中写过下面的
query

查询:

{
    "_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
        },
...

我还尝试了

query
中的另一个过滤器
match

{
    "_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
        }
      ]
    }
  }
}

我做错了什么吗?

elasticsearch full-text-search opensearch
1个回答
0
投票

第一个回复在技术上是正确的,因为您在 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
}
© www.soinside.com 2019 - 2024. All rights reserved.