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

标签 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])));

但是 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/

相关文章:

c# - Linq DataTable 和 Take 方法

c# - Linq 直方图

c# - 如何使用鼠标滚轮在 WPF 中水平滚动?

c# - DateTime 函数之间有什么区别?

java - 给定一个格式化的日期时间范围,分割并打印该范围之外的每个小时

datetime - 需要一个公式 : Extracting Years from Seconds Since January 1, 0001 12:00 AM

elasticsearch - 如何在 Filebeat/ELK 中为不同的日志定义单独的索引?

elasticsearch - 如果我可以直接发布到Elasticsearch,为什么要使用Beats?

elasticsearch - 如何增加Elasticsearch Metaphone语音过滤器的最大代码长度?

c# - 在 Windows 7 上调用 IPrincipal.IsInRole