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