Я работаю в системе, которая должна выбирать допустимые дни из произвольного расписания.
Я хочу иметь возможность использовать список 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);
EDIT:
Решено с помощью этого кода, спасибо за помощь!
Примечание: API NEST довольно запутанный, если вы не знаете синтаксис DSL.
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)));
Говоря о гибкости, они хотят сделать NEST API проще для разработчиков C # и в будущем, так что следите за этим.
Все селекторы в коде кажутся слишком раздутыми.
Я использовал || оператор вместо | потому что || имеет преимущества в производительности, если ваше выражение оценивается и соответствует совпадению, оно возвращается быстрее.
Надеюсь, это поможет любому, кто его ищет.