如何在特定时间范围内从Elasticsearch获取数据

时间:2019-05-22 09:21:53

标签: c# rest elasticsearch asp.net-core

我的 elasticsearch 中有日期,其中包含类型为日期的时间戳字段。 现在,我将仅两个日期之间过滤结果。我正在使用嵌套 C#

如何获得时间戳记在mai 2019 1th,10:00:00到mai 5 5th,23:59:59之间的结果?

现在我的搜索请求如下:

                result = ElasticClient.Search<_doc>
                (document => document
                    .Source(src => src
                        .Includes(i => i
                            .Fields(
                            p => p.Timestamp,
                            p => p.Value
                            )
                        )
                    )
                    .Query(q => q
                        .Match(m => m
                            .Field(f => f.DataRecordId)
                            .Query(search)
                        )   
                    )
                );

2 个答案:

答案 0 :(得分:0)

您需要为此使用range query。假设用于日期字段的格式为YYYY-MM-dd HH:mm:ss,并且字段名称为timestamp,以下查询将起作用:

{
  "query": {
    "range": {
      "timestamp": {
        "gte": "2019-05-01 10:00:00",
        "lte": "2019-05-05 23:59:59"
      }
    }
  }
}

答案 1 :(得分:0)

如果要过滤此范围内的数据,请尝试以下操作:

            var result = ElasticClient.Search<_doc>
            (document => document
                .Source(src => src
                    .Includes(i => i
                        .Fields(
                        p => p.Timestamp,
                        p => p.Value
                        )
                    )
                )
                .Query(q => q
                    .Bool(b => b
                        .Must(m => m
                            .DateRange(r => r
                                .Field(p => p.Timestamp)
                                .GreaterThanOrEquals("2019-05-01T10:00:00")
                                .LessThanOrEquals("2019-05-05T23:59:59")
                            )
                        )
                    )
                )
            );

Date Range Query Usage