如何在Nest ElasticSearch客户端中编写日期范围查询
本文关键字:日期 范围 查询 客户端 Nest ElasticSearch | 更新日期: 2023-09-27 18:27:51
我有一个.Net应用程序试图从elasticsearch文档存储中获取数据,记录的结构如下:
{
"_index": "TestIndex",
"_type": "amqp",
"_id": "123",
"_source": {
"@timestamp": "2014-10-27T01:31:54.780Z",
"type": "amqp",
"LogGenerationTime": "2014-10-26T21:31:54.780",
"ThreadID": "6",
"ProcessID": "8136",
"SessionID": "xyz",
"UserID": "12345678",
},
}
我想用LogGenerationTime获取最后20分钟内的所有记录。这是我到目前为止写的查询,但它似乎没有返回任何数据:
var format = "yyyy-MM-dd'T'HH:mm:ss.fff";
var lowerBound = DateTime.Now.AddMinutes(-20);
ISearchResponse<Amqp> resultSet = _elasticSearchClient.Search<Amqp>(q => q.Query
(p => p.Range
(v => v.OnField
(x => x.LogGenerationTime).GreaterOrEquals(lowerBound, format))));
有人能帮助编写正确的查询以获取预期结果吗?谢谢
查看源代码,OnField方法有两个重载。当我使用接受Linq表达式参数的时,查询不会返回任何数据。但我能够使它与另一个重载一起工作,该重载采用字符串值,我将弹性搜索文档的字段名作为字符串传递。以下是返回预期结果的查询:
var resultSet = _elasticSearchClient.Search<Amqp>(q => q.Query
(p => p.Range(v => v.OnField("LogGenerationTime").GreaterOrEquals(lowerBound))).Size(10000));
看起来像是框架中的一个错误,但不完全确定。
以下代码适用于我:
Range(r => r.GreaterOrEquals(lowerBound).Format("MM/dd/yyyy").OnField(LogTime))