Cloudant: Как создать индекс для функции "Сортировка"?

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

{
  "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"? По сути, я пытаюсь сортировать по дате и времени. Это возможно?

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам