elasticsearch,nest,C#,Datetime,elasticsearch,Nest" /> elasticsearch,nest,C#,Datetime,elasticsearch,Nest" />

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

使用elasticsearch的日期过滤器,使用nest c#,c#,datetime,elasticsearch,nest,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);

我有一个日期字段的映射,如下所示

.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])));
但弹性搜索也在搜索中考虑时间。i、 e我希望获得在2015年10月2日之后创建的文档,我也将获得在2015年10月2日创建的文档。请告诉我可能的解决办法


谢谢,请提前通知。

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

至少在NEST 1.4.1中,与日期相关的范围方法对格式有重载,如
n.greaterequals(date,“MM/dd/yyyy”)
。只是为了让东西更干净一点。@Snixtor如果你注意到的话,我就是这么做的。日期计算的微小复杂性是为了满足所问问题的要求。@bsarkar我正在寻找“2/11/2015”之后创建的文档。我尝试了格式化重载方法。但还是没有运气。通过将日期设置为“2/11/2015 23:59:59”作为临时解决方案,我正在获取所需的文档。@RavindraKumarChallagandla我认为这里有些混乱。如果您想搜索在
2/10/2015
之后创建的文档,我的代码可以正常工作,因为这正是您在问题中要求的。如果对您有效,请将其标记为“答案”。@baskar我不想在搜索文档时包含时间戳。我有什么办法可以做到这一点吗?