Производительность поиска Azure при использовании String vs DateTimeOffset для значений даты - PullRequest
0 голосов
/ 12 июня 2018

Работают ли фильтры сравнения (то есть: между, больше, меньше чем и т. Д.) С такими же быстродействующими (форматированными) свойствами строки, как и при нацеливании на определенные типы данных (DateTimeOffset)?

Например,если я хочу получить документы, которые были изменены после 2011-05-12, будет ли modifiedDateTime gt 2011-05-12T12:44:57.201Z, где modifiedDateTime равно DateTimeOffset, работать лучше, чем modifiedDateTimeString gt '2011-05-12T12:44:57.201Z', где modifiedDateTimeString - поле типа String?

И есть ли какая-либо особенность поиска Azure, которая является типом данных, специфичным для DateTimeOffset?

1 Ответ

0 голосов
/ 14 июня 2018

Короткий ответ заключается в том, что сравнения диапазонов строк в поиске Azure официально не поддерживаются, поэтому для хранения информации о дате и времени следует использовать Edm.DateTimeOffset.

Более длинный ответ заключается в том, что сравнения диапазонов строкработать, но только вне контекста лямбды (any или all).Это была случайная особенность, которую мы решили не удалять в случае, если люди ее использовали, но мы также решили не размещать рекламу, поскольку тот факт, что она работает только вне лямбд, может сбивать с толку.

Если вы 'Мне бы хотелось, чтобы поиск Azure поддерживал сравнения диапазонов в строках с синтаксисом $ filter. Добавьте предложение на User Voice .

Предполагая, что вы в порядке с функциональными ограничениями сравнения диапазонов,Есть еще вопрос производительности, чтобы ответить.Это не то, что мы тестировали, но мы можем немного поразмышлять.

Под капотом Edm.DateTimeOffset хранится в инвертированном индексе в виде длинного количества миллисекунд с начала эпохи.В терминах Lucene они запрашиваются с использованием NumericRangeQuery вместо TermRangeQuery.Числовые поля индексируются с использованием попыток, что повышает производительность запроса по сравнению с запросом с эквивалентным диапазоном терминов. Документация Lucene является хорошей отправной точкой для понимания того, как это работает, если вы хотите углубиться в подробности.

И есть ли какая-либо функция поиска Azure, которая имеет тип данныхспецифично для DateTimeOffset?

Да.Для функции оценки свежести требуется поле DateTimeOffset, и есть определенные опции для интервальной огранки (день, месяц, год и т. Д.), Которые применяются только к полям DateTimeOffset.

...