我正在映射日期字段,如下所示。
.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”。但如果您不希望出现这种行为,您可以根据您的要求调整我的解决方案。
关于c# - 使用elasticsearch的日期过滤器,使用nest c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453715/