"Неизвестная ошибка: mango_idx:: {no_usable_index,missing_sort_index}"}
У меня есть следующий запрос:
{'type': 'text',
'name': 'album-rating-text',
'index': {'fields': [
{'type': 'string', 'name': 'user_id'},
{'type': 'string', 'name': 'album_id'},
{'type': 'number', 'name': 'timestamp'}
]}}
Вот запрос:
{'sort': [
{'user_id': 'desc'},
{'album_id': 'desc'},
{'timestamp': 'desc'}
],
'limit': 1,
'fields': ['user_id', 'album_id', 'timestamp'],
'selector': {
'$and': [
{'user_id': {'$eq': 'a@a.com'}},
{'album_id': {'$in': ['bf129f0d', '380e3a05'
]
}}]}}
Ошибка:
{
"error":"unknown_error",
"reason":"Unknown Error: mango_idx :: {no_usable_index,missing_sort_index}"
}
Однако я видел похожий вопрос, все поля, по которым я индексирую, находятся в моем списке сортировки.
Обновление:
В качестве обходного пути я попытался упростить, удалив поле метки времени:
{"type": "text",
"name": "album-rating-text",
"index": {"fields": [
{"type": "string", "name": "user_id"},
{"type": "string", "name": "album_id"}
]}}
И запрос как так...
{"selector": {"$and": [
{"user_id": {"$eq": "a@a.com"}},
{"album_id": {"$in": ["bf129f0d", "380e3a05"]}
}]},
"fields": ["user_id", "album_id"]}
Я получаю следующую ошибку:
{"warning":"no matching index found, create an index to optimize query time",
"docs":[
]}
3 ответа
Если я правильно помню, требования к моему запросу изменились, и я решил использовать стандартный индекс поиска Cloudant вместо индекса Mango.
Чтобы использовать функцию сортировки для настраиваемого поля, это поле необходимо вручную зарегистрировать в "Query-index".
Cloudant не делает этого, потому что это потребляет ресурсы:
"Пример в редакторе показывает, как индексировать поле" foo ", используя индекс типа json. Вы можете автоматически индексировать все поля во всех ваших документах, используя индекс текстового типа с синтаксисом" { "index": {}, "type": "text" }', обратите внимание, что индексирование всех полей может потреблять много ресурсов для больших наборов данных. "
Вы можете сделать это с помощью панели управления Cloudant. Перейдите в свою базу данных и найдите "Запрашиваемые индексы". Нажмите Изменить.
Добавьте свое поле в шаблон по умолчанию:
{
"index": {
"fields": [
"user_id"
]
},
"type": "json"
}
Нажмите "Создать индекс"
Поле user_id теперь доступно для запроса, и теперь вы можете использовать функцию сортировки для него. Все поля необходимо добавить вручную, или вы можете зарегистрировать все поля как Query-index с помощью: { "index": {}, "type": "text" }
Видеоинструкция по созданию Query-индекса: https://www.youtube.com/watch?v=B3ZkxSFau8U
Попробуйте использовать индекс JSON вместо текстового индекса:
{
"type": "json",
"name": "album-rating-text",
"index": {
"fields": ["user_id", "album_id", "timestamp"]
}
}