Короткий ответ заключается в том, что сравнения диапазонов строк в поиске Azure официально не поддерживаются, поэтому для хранения информации о дате и времени следует использовать Edm.DateTimeOffset
.
Более длинный ответ заключается в том, что сравнения диапазонов строкработать, но только вне контекста лямбды (any
или all
).Это была случайная особенность, которую мы решили не удалять в случае, если люди ее использовали, но мы также решили не размещать рекламу, поскольку тот факт, что она работает только вне лямбд, может сбивать с толку.
Если вы 'Мне бы хотелось, чтобы поиск Azure поддерживал сравнения диапазонов в строках с синтаксисом $ filter. Добавьте предложение на User Voice .
Предполагая, что вы в порядке с функциональными ограничениями сравнения диапазонов,Есть еще вопрос производительности, чтобы ответить.Это не то, что мы тестировали, но мы можем немного поразмышлять.
Под капотом Edm.DateTimeOffset
хранится в инвертированном индексе в виде длинного количества миллисекунд с начала эпохи.В терминах Lucene они запрашиваются с использованием NumericRangeQuery вместо TermRangeQuery
.Числовые поля индексируются с использованием попыток, что повышает производительность запроса по сравнению с запросом с эквивалентным диапазоном терминов. Документация Lucene является хорошей отправной точкой для понимания того, как это работает, если вы хотите углубиться в подробности.
И есть ли какая-либо функция поиска Azure, которая имеет тип данныхспецифично для DateTimeOffset?
Да.Для функции оценки свежести требуется поле DateTimeOffset, и есть определенные опции для интервальной огранки (день, месяц, год и т. Д.), Которые применяются только к полям DateTimeOffset.