【发布时间】:2018-10-13 15:32:39
【问题描述】:
我正在开发一个需要从任意时间表中选择有效日期的系统。
我希望能够使用 DateRanges 列表作为我的搜索请求,但我不确定如何在弹性 NEST 中实际有效地做到这一点。
这里有一些示例代码,说明我正在尝试有效地做些什么。
// my list of date ranges
var dateQuery = new List<DateRangeQuery>();
// make query foreach day
foreach (var day in valid_days)
{
dateQuery.Add(new DateRangeQuery
{
Field = "Date",
GreaterThanOrEqualTo = day.Item1, // DateTime start of day tuple
LessThanOrEqualTo = day.Item2 // DateTime end of day tuple
});
}
// query by list of search request
var search = new SearchRequest
{
// how do i use a list of date time's here?
Query = dateQuery;
}
var example = _client.Search(search);
编辑:
已使用此代码解决,感谢您的帮助!
注意:如果您不了解 DSL 语法,NEST API 会很混乱。
var dateQuery = new QueryContainer();
// make date range query from valid day list
foreach (var day in daylist)
{
// x = x || y
dateQuery = dateQuery || new DateRangeQuery
{
Field = "date",
GreaterThanOrEqualTo = day.Item1, // start of day
LessThanOrEqualTo = day.Item2 // end of day
};
}
// match by query
var search = _client.Search(
s => s.Query(
q => && q.Bool(b => b.Should(dateQuery)));
谈到弹性,他们希望将来也为 C# 开发人员简化 NEST API,所以请注意这个空间。
所有的选择器都感觉代码太臃肿了。
我用过 ||运算符而不是 |因为||如果您的表达式被评估并匹配,则具有性能优势,它会更快返回。
希望这对寻找它的人有所帮助。
【问题讨论】:
标签: c# elasticsearch