如何在Nest ElasticSearch客户端中编写日期范围查询?

Chr*_*lis 11 .net c# lambda elasticsearch nest

我有一个.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",
  },  
}
Run Code Online (Sandbox Code Playgroud)

我想在最后20分钟内使用LogGenerationTime获取所有记录.这是我到目前为止所写的查询,但它似乎没有返回任何数据:

    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))));
Run Code Online (Sandbox Code Playgroud)

有人可以帮助编写正确的查询来获取预期的结果吗?谢谢!

Chr*_*lis 8

查看源代码,OnField方法有两个重载.当我使用带有Linq表达式参数的那个时,查询不会返回任何数据.但我能够使用另一个重载,它接受字符串值,我将弹性搜索文档的字段名称作为字符串传递.这是返回预期结果的查询:

var resultSet = _elasticSearchClient.Search<Amqp>(q => q.Query
                (p => p.Range(v => v.OnField("LogGenerationTime").GreaterOrEquals(lowerBound))).Size(10000));
Run Code Online (Sandbox Code Playgroud)

看起来像框架中的错误,但我不完全确定.