日期过滤器使用elasticsearch,使用nest c#

时间:2015-02-11 11:54:03

标签: c# datetime elasticsearch nest

我正在为日期字段进行映射,如下所示。

.Date(s => s.Name("createdOn").Format("yyyy-MM-dd'T'HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ss||MM/dd/yyyy||yyyy/MM/dd"))

我希望在特定日期之后创建文档。我将日期作为字符串以MM / dd / yyyy格式传递给过滤器范围,如下所示。

DateTime date;
DateTime.TryParse(filter.SearchText, out date);
string dateString = date.ToString("MM/dd/yyyy");
query = filterDesc.And(filterDesc.Range(n =>n.Greater(dateString).OnField(searchFields[filter.Field])));

但弹性搜索正在考虑搜索时间。即我希望获得2/10/2015之后创建的文档,我也会获得在2/10/2015上创建的文档。请让我知道可能的解决方案。

先谢谢你。

1 个答案:

答案 0 :(得分:3)

基本上您要搜索在" 2/11/2015 00:00"之后或之后创建的文档。下面的代码应该可以正常工作;我自己也没试过。

DateTime date;
DateTime.TryParse(filter.SearchText, out date);
date = date.Date.AddDays(1); // date = floor(date) + 1 day
string dateString = date.ToString("MM/dd/yyyy");
query = filterDesc.And(filterDesc.Range(n =>n.GreaterOrEquals(dateString).OnField(searchFields[filter.Field])));

请注意,如果文档中的日期确实是" 2/10/2015 00:00",则不会将文档作为上述查询结果的一部分返回。这是因为我们将日期转换为" 2/11/2015 00:00"。但如果您不想要这种行为,可以根据您的要求调整我的解决方案。