2015-02-09 2 views
5

Документы Microsoft Azure BadRequestException Недопустимый запрос был задан с фильтрами против пути (ов), которые не индексируются по диапазону. Подумайте о добавлении разрешающего заголовка сканирования в запрос.DocumentDB - Невозможно сравнить два пути в запросе

Мой запрос:

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

OVER ?? количество документов (так как нет никакого способа, чтобы получить номер документа в коллекции с DocumentDB)

+0

Можете ли вы разместить образец данных, которые вы запрашиваете? Я предполагаю, что пользователи не сопоставимы. Вы уверены, что они не струны? –

+0

{ "ш": -65,6583190150559, "долгота": -74,98864685185254, "возраст": 45,79291892424226, "кошки": 32, "идентификатор": "f6a82cae-8f57-a9a4-d741-6c9054b2c4ec" } – user2402622

+0

, которые не индексируются по диапазону? возможно, следует добавить специальные опции? Я использую nodejs require ('documentdb'). DocumentClient, options: {masterKey: {authKey}} – user2402622

ответ

3

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

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

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

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

When вы создаете коллекцию, вы можете передать IndexingPolicy через параметр тела. 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 
    }); 
+0

Как выбрать тип индекса Range из запроса NodeJs? – user2402622

+0

Это делается при указании политики индексирования. Это нужно сделать в коде, это невозможно сделать на портале администратора. –

+0

Добавил его в свой ответ. –

1

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

+0

Как это релевантно (тем более, ответ)? –

+0

@ivan_pozdeev: Это помогает мне! –

Смежные вопросы