2014-12-04 4 views
2

Проблема, с которой я столкнулась, заключается в создании правильного индекса для запроса через мою базу данных Cloudant. Структура данных JSON, которую я использую, похожа на приведенную ниже.Cloudant: Как создать индекс для функции «Сортировать»?

{ 
 
    "customer" : "123", 
 
    "time" : "2014-11-20" 
 
}

Я хочу, чтобы отсортировать документы, основанные на времени. Индекс запросов, который я использовал:

curl -X POST 'https://<user>:<pass>@<user>.cloudant.com/<DB-name>/_index' -d ' 
 
{ 
 
    "index": { 
 
    "fields": [ 
 
     "customer", 
 
     "time" 
 
    ] 
 
    } 
 
}'

И запрос, который я использую:

curl -X POST 'https://<user>:<pass>@<user>.cloudant.com/<DB-name>/_find' -d ' 
 
{ 
 
    "selector": { 
 
    "customer" : "123" 
 
    }, 
 
    "sort": [ 
 
    "time" 
 
    ] 
 
}'

код ошибки я получаю "no_usable_index". Может ли кто-нибудь дать представление об этой проблеме?

Кроме того, что было бы иначе, если бы время было в формате: «2014-11-20 11:50:00»? По существу, я стараюсь сортировать по дате и времени. Это возможно?

ответ

3

В сообщении об ошибке сообщается, что для выполнения сортировки нет индекса, или, по крайней мере, он не может его найти. Для того, чтобы помочь ему найти, сортировать по клиенту, а затем на время, например, так:

curl -X POST 'https://<user>:<pass>@<user>.cloudant.com/<DB-name>/_find' -d ' 
{ 
    "selector": { 
    "customer" : "123" 
    }, 
    "sort": [ 
    "customer", 
    "time" 
    ] 
}' 

Этого запрос функционально идентичен, но теперь Cloudant запрос будет найти индекс.

Что касается вашего вопроса о другом формате времени, поле времени по-прежнему будет рассматриваться как поле строки для целей сортировки. В вашем случае это означает, что вы получите ожидаемый результат.

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