NEST elasticsearch DateRange查询

NEST elasticsearch DateRange query

我正在尝试使用 NEST api 在预定义的日期范围内从 elasticsearch 获取结果,但我无法做到。这个示例代码我试图检索一周的数据,但它忽略了我的日期过滤器并返回比我的初始日期更旧的数据。

在此先感谢您的帮助!

var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(node);
var client = new ElasticClient(settings);

settings.DefaultIndex("wholelog-2017.04*");

client.CreateIndex("wholelog-2017.04*",
create => create.Mappings(
    mappings => mappings.Map<LogLine>(type => 
        type.AutoMap()
        )
        ));

DateTime InitDate = DateTime.Now.AddDays(-7);

var filterClauses = new List<QueryContainer>();

filterClauses.Add(new DateRangeQuery
{
     Field = new Field("logTime"),
     LessThanOrEqualTo = DateTime.Now,
     GreaterThanOrEqualTo = InitDate
});

var searchRequest = new SearchRequest<LogLine>()
{
     Size = 10000,
     From = 0,
     Scroll = "1m",
     Query = new BoolQuery
     {
           Filter = filterClauses
     }
};

var searchResult = client.Search<LogLine>(searchRequest);


[ElasticsearchType(Name="logLine")]
public class LogLine
{
    public string Message {get;set;}
    public DateTime logTime {get;set;}
    public string type {get;set;}
    public string logServer {get;set;}
}

logstash 配置文件

output {
    elasticsearch{
       hosts => "localhost"
       #user => ####
       #password => ####
       index => "wholelog-%{+YYYY.MM.dd}"
    } 
}

我假设您没有明确放置映射,只是开始将文档添加到索引中。尝试像这样创建一个新索引

client.CreateIndex(indexName,
    create => create.Mappings(
        mappings => mappings.Map<LogLine>(
            type => type.AutoMap()
        )
    )
);

并在您的字段中使用 DateTimeDateMath 用于构建搜索查询

[ElasticsearchType(Name = "logLine")]
public class LogLine
{
    public string Message { get; set; }
    public DateTime logTime { get; set; }
    public string type { get; set; }
    public string logServer { get; set; }
}

明确放置映射后,尝试添加文档并搜索新索引。