DocumentDB - невозможно сравнить два пути в запросе

Документы Microsoft Azure BadRequestException Был указан недопустимый запрос с фильтрами для путей, которые не индексируются по диапазону. Рассмотрите возможность добавления в запрос заголовка разрешения сканирования.

Мой запрос:

SELECT c.id FROM users c WHERE (c.lat < 29.89)

НАД ?? количество документов (поскольку нет возможности получить количество документов в коллекции с помощью DocumentDB)


person user2402622    schedule 09.02.2015    source источник
comment
Можете ли вы опубликовать образец запрашиваемых данных? Я предполагаю, что users.lat нельзя сравнивать. Вы уверены, что это не струны?   -  person Timo Willemsen    schedule 10.02.2015
comment
{lat: -65.6583190150559, lon: -74.98864685185254, возраст: 45.79291892424226, cat: 32, id: f6a82cae-8f57-a9a4-d741-6c9054b2c4ec}   -  person user2402622    schedule 10.02.2015
comment
которые не индексируются по диапазону? может мне стоит добавить специальные опции? Я использую nodejs require ('documentdb'). DocumentClient, параметры: {masterKey: {authKey}}   -  person user2402622    schedule 10.02.2015


Ответы (2)


Если вы посмотрите здесь сообщение в блоге: http://azure.microsoft.com/blog/2015/01/27/performance-tips-for-azure-documentdb-part-2/

Совет политики индексирования № 3: укажите тип пути индекса диапазона для всех путей, используемых в запросах диапазона

DocumentDB в настоящее время поддерживает два типа путей индекса: хэш и диапазон. Выбор типа пути к индексу Hash обеспечивает эффективные запросы на равенство. Выбор типа индекса Range включает запросы диапазона (с использованием >, <, >=, <=).

Он дает пример на C # для добавления индекса диапазона, чтобы сделать путь сопоставимым, но аналогичная функциональность есть в библиотека node.js.

При создании коллекции вы можете передать IndexingPolicy через параметр body. В IndexingPolicy есть пара участников. Один из них - IncludedPaths, где вы можете определять индексы.

var policy = { 
   Automatic: true,
   IndexingMode: 'Lazy',
   IncludedPaths: [
      {
      IndexType: "Range",
      Path: "path to be indexed (c.lat)",
      NempericPrecission: "1",
      StringPrecission: "1"
      }
   ],
   ExcludedPaths: []
}

client.createCollection(
  '#yourdblink', 
  { 
    id: 10001, 
    indexingPolicy: policy 
  });
person Timo Willemsen    schedule 09.02.2015
comment
Как выбрать тип индекса Range из запроса NodeJs? - person user2402622; 10.02.2015
comment
Вы делаете это, когда указываете свою политику индексирования. Это должно быть сделано в коде, это не может быть сделано на портале администратора. - person Luis Delgado; 10.02.2015
comment
Добавил в свой ответ. - person Timo Willemsen; 10.02.2015

Политику можно изменить на новом портале Azure (https://portal.azure.com) в разделе ( ваш ресурс DocumentDB) -> Настройки -> Политика индексирования.

person Diego B    schedule 25.11.2016