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

date filter using elasticsearch, using nest c#

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

.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])));

但是elasticsearch在搜索的时候也在考虑时间。即我想获取在 2/10/2015 之后创建的文档,我也在获取在 2/10/2015 之后创建的文档。请告诉我可能的解决方案。

提前致谢。

基本上您要搜索在“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”。但是如果你不想要这种行为,你可以根据你的要求调整我的解决方案。