/{db}/_find
-
POST/{db}/_find -
Поиск документов с использованием декларативного синтаксиса запросов JSON. В запросах будут использоваться пользовательские индексы, указанные с помощью конечной точки _index, если они доступны. В противном случае, если это разрешено, используется встроенный индекс _all_docs, который может работать произвольно медленно.
- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
application/json
-
- Объект JSON запроса:
-
selector (object) – Объект JSON с критериями выбора документов. Дополнительные сведения см. в разделе о синтаксисе селектора. Обязательно
limit (number) – Максимальное количество возвращаемых результатов. Значение по умолчанию:
25. Необязательноskip (number) – Пропустить первые «n» результатов, где «n» — указанное значение. Необязательно
sort (array) – Массив JSON, соответствующий синтаксису сортировки. Необязательно
fields (array) – Массив JSON с указанием полей каждого объекта, которые следует вернуть. Если параметр опущен, возвращается весь объект. Дополнительные сведения см. в разделе о фильтрации полей. Необязательно
use_index (string|array) – Запросить использование определённого индекса. Указывается как
"<design_document>"или["<design_document>", "<index_name>"]. Фактическое использование индекса не гарантируется: если индекс не подходит для селектора, выполняется попытка перейти к подходящему индексу. Поэтому этот параметр скорее является подсказкой. Если происходит переключение, подробности указываются в полеwarningответа. Необязательноallow_fallback (boolean) – Указывает, разрешено ли переключение на другой подходящий индекс. Это может произойти при выполнении запроса с индексом, указанным в
use_index, который признан непригодным, или когда из-за отсутствия индексов, подходящих для запроса, будет выбран только встроенный индекс _all_docs. Отключение этой логики переключения приводит к немедленной ошибке конечной точки в таких случаях. Значение по умолчанию:true. Необязательноconflicts (boolean) – Включать документы с конфликтами, если
true. Предназначено для быстрого поиска документов с конфликтами без индекса или представления. Значение по умолчанию:false. Необязательноr (number) – Кворум чтения, необходимый для получения результата. По умолчанию равен 1; в этом случае возвращается документ, найденный в индексе. Если задано большее значение, каждый документ считывается как минимум с такого количества реплик, прежде чем будет включён в результаты. Это, вероятно, займёт больше времени, чем использование только документа, хранящегося локально вместе с индексом. Необязательно, по умолчанию: 1
bookmark (string) – Строка, позволяющая указать нужную страницу результатов. Используется для постраничного просмотра наборов результатов. Каждый запрос возвращает непрозрачную строку в ключе
bookmark, которую затем можно передать в запросе для получения следующей страницы результатов. Если между запросами изменится какая-либо часть запроса селектора, результаты не определены. Необязательно, по умолчанию: nullupdate (boolean) – Следует ли обновить индекс перед возвратом результата. Значение по умолчанию:
true. Необязательноstable (boolean) – Следует ли возвращать результаты представления из «стабильного» набора шардов. Необязательно
stale (string) – Сочетание параметров
update=falseиstable=true. Возможные значения:"ok",false(по умолчанию). Необязательно Обратите внимание, что этот параметр устарел. Вместо него используйтеstableиupdate. Дополнительные сведения см. в разделе Создание представлений.execution_stats (boolean) – Включать статистику выполнения в ответ на запрос. Необязательно, по умолчанию:
false
- Заголовки ответа:
-
-
application/json
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
docs (object) – Массив документов, соответствующих поисковому запросу. Для каждого найденного документа перечислены поля, указанные в части тела запроса
fields, а также их значения.warning (string) – Предупреждения о выполнении
execution_stats (object) – Статистика выполнения
bookmark (string) – Непрозрачная строка для постраничного просмотра. Сведения об использовании см. в поле
bookmarkзапроса (выше).
- Коды состояния:
-
200 OK – Запрос успешно выполнен
400 Bad Request – Некорректный запрос
401 Unauthorized – Требуется разрешение на чтение
403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными
404 Not Found – Запрошенная база данных не найдена
500 Internal Server Error – Ошибка выполнения запроса
Значения limit и skip работают именно так, как можно ожидать. Хотя skip существует, он не предназначен для постраничного просмотра. Причина в том, что функция bookmark работает эффективнее.
Запрос:
Пример тела запроса для поиска документов с использованием индекса:
POST /movies/_find HTTP/1.1 Accept: application/json Content-Type: application/json Content-Length: 168 Host: localhost:5984 { "selector": { "year": {"$gt": 2010} }, "fields": ["_id", "_rev", "year", "title"], "sort": [{"year": "asc"}], "limit": 2, "skip": 0, "execution_stats": true }Ответ:
Пример ответа при поиске документов с использованием индекса:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Thu, 01 Sep 2016 15:41:53 GMT Server: CouchDB (Erlang OTP) Transfer-Encoding: chunked { "docs": [ { "_id": "176694", "_rev": "1-54f8e950cc338d2385d9b0cda2fd918e", "year": 2011, "title": "The Tragedy of Man" }, { "_id": "780504", "_rev": "1-5f14bab1a1e9ac3ebdf85905f47fb084", "year": 2011, "title": "Drive" } ], "execution_stats": { "total_keys_examined": 200, "total_docs_examined": 200, "total_quorum_docs_examined": 0, "results_returned": 2, "execution_time_ms": 5.52 } }
Синтаксис сортировки
Поле sort содержит список пар «имя поля и направление», представленный в виде обычного массива. Первая пара «имя поля и направление» задаёт основной уровень сортировки. Вторая пара, если она указана, задаёт следующий уровень сортировки.
Можно указать любое поле; для полей вложенных документов при необходимости используется точечная нотация.
Для сортировки по возрастанию значение направления — "asc", а для сортировки по убыванию — "desc". Если значение направления опущено, используется значение по умолчанию "asc".
Пример сортировки по двум полям:
[{"fieldName1": "desc"}, {"fieldName2": "desc"}]
Пример сортировки по двум полям с направлением по умолчанию для каждого:
["fieldNameA", "fieldNameB"]
Обычно требуется найти содержимое с помощью селектора, а затем отсортировать результаты по указанному полю в нужном направлении.
Для сортировки необходимо убедиться, что:
Хотя бы одно из полей сортировки указано в селекторе.
Уже определён индекс, содержащий все поля сортировки в том же порядке.
Каждый объект в массиве сортировки содержит один ключ.
Если объект в массиве сортировки содержит не один ключ, результирующий порядок сортировки зависит от реализации и может измениться.
Find не поддерживает сортировку по нескольким полям с разными направлениями, поэтому направление должно быть либо восходящим для всех полей, либо нисходящим для всех.
В сортировках текстового поиска иногда необходимо указать тип поля, например:
{
"<fieldname>:string": "asc"
} Если возможно, тип поля определяется на основе селектора. В неоднозначных случаях тип поля необходимо указать явно.
Порядок сортировки не определён, если поля содержат данные разных типов. Это важное отличие текстовых индексов от индексов представлений. Поведение сортировки для полей с данными разных типов может измениться в будущих версиях.
Простой запрос с сортировкой:
{
"selector": {"Actor_name": "Robert De Niro"},
"sort": [{"Actor_name": "asc"}, {"Movie_runtime": "asc"}]
} Фильтрация полей
При выборе документов из базы данных можно точно указать, какие поля документа возвращать. Это даёт два преимущества:
Результаты будут содержать только те части документа, которые нужны вашему приложению.
Уменьшится размер ответа.
Возвращаемые поля задаются в виде массива.
В ответ включаются только указанные поля фильтрации. Если задан список полей, поле _id и другие поля метаданных автоматически не включаются.
Пример выборочного получения полей из найденных документов:
{
"selector": { "Actor_name": "Robert De Niro" },
"fields": ["Actor_name", "Movie_year", "_id", "_rev"]
} Постраничный просмотр
Запросы Mango поддерживают постраничный просмотр с помощью поля bookmark. Каждый ответ _find содержит закладку — токен, который CouchDB использует для определения места, с которого следует продолжить выполнение последующих запросов. Чтобы получить следующий набор результатов запроса, добавьте закладку из предыдущего ответа в следующий запрос. Не забудьте оставить selector без изменений, иначе результаты могут оказаться неожиданными. Для перехода назад можно использовать предыдущую закладку, чтобы получить предыдущий набор результатов.
Обратите внимание: наличие закладки не гарантирует, что есть дополнительные результаты. Проверить, достигнут ли конец набора результатов, можно, сравнив количество возвращённых результатов с запрошенным размером страницы: если количество результатов меньше limit, дополнительных результатов нет.
Статистика выполнения
Find может возвращать основную статистику выполнения для конкретного запроса. Вместе с конечной точкой _explain эта статистика позволяет понять, насколько эффективно используются индексы.
В настоящее время статистика выполнения включает:
Поле | Описание |
|---|---|
| Количество проверенных ключей индекса. |
| Количество документов, полученных из базы данных / индекса; аналогично использованию |
| Количество документов, полученных из базы данных посредством внеполосного запроса документа. Значение отлично от нуля только в том случае, если в параметрах запроса указан кворум чтения > 1. |
| Количество результатов, возвращённых запросом. В идеале это значение не должно быть значительно меньше общего количества проверенных документов / ключей. |
| Общее время выполнения в миллисекундах, измеренное базой данных. |
/{db}/_index
Mango — декларативный язык запросов JSON для баз данных CouchDB. Mango поддерживает несколько типов индексов, начиная со встроенного первичного индекса. Индексы Mango типа json создаются с помощью представлений MapReduce.
-
POST/{db}/_index -
Создать новый индекс в базе данных
- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
application/json
-
- Параметры запроса:
-
index (object) – Объект JSON с описанием создаваемого индекса. (Зависит от типа индекса; см. раздел Индексы.)
ddoc (string) – Имя проектного документа, в котором будет создан индекс. По умолчанию каждый индекс создаётся в отдельном проектном документе. Для повышения эффективности индексы можно объединять в проектные документы. Однако изменение одного индекса в проектном документе сделает недействительными все остальные индексы в этом же документе (аналогично представлениям). Необязательно
name (string) – Имя индекса. Если имя не указано, оно будет создано автоматически. Необязательно
type (string) – Может принимать значения
"json","text"(для clouseau) или"nouveau". По умолчанию используется"json". Текстовые индексы и индексы Nouveau относятся к соответствующим функциям и доступны только при их установке. Необязательноpartitioned (boolean) – Определяет, является ли индекс JSON секционированным или глобальным. Значение по умолчанию для
partitioned— свойствоpartitionedбазы данных. Чтобы создать глобальный индекс в секционированной базе данных, укажитеfalseдля поля"partitioned". Если указатьtrueдля поля"partitioned"в несекционированной базе данных, возникнет ошибка.
- Заголовки ответа:
-
-
application/json
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
result (string) – Флаг, указывающий, был ли индекс создан или уже существовал. Может принимать значения
"created"или"exists".id (string) – Идентификатор проектного документа, в котором был создан индекс.
name (string) – Имя созданного индекса.
- Коды состояния:
-
200 OK – Индекс успешно создан или уже существует
400 Bad Request – Некорректный запрос
401 Unauthorized – Требуется разрешение администратора
403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными
404 Not Found – База данных не найдена
500 Internal Server Error – Ошибка выполнения
Пример создания нового индекса для поля с именем
foo:Запрос:
POST /db/_index HTTP/1.1 Content-Type: application/json Content-Length: 116 Host: localhost:5984 { "index": { "fields": ["foo"] }, "name" : "foo-index", "type" : "json" }
Возвращённый JSON подтверждает, что индекс создан:
Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 96 Content-Type: application/json Date: Thu, 01 Sep 2016 18:17:48 GMT Server: CouchDB (Erlang OTP/18) { "result":"created", "id":"_design/a5f4711fc9448864a13c81dc71e660b524d7410c", "name":"foo-index" }
Пример создания индекса с использованием всех доступных параметров запроса:
Запрос:
POST /db/_index HTTP/1.1 Content-Type: application/json Content-Length: 396 Host: localhost:5984 { "index": { "partial_filter_selector": { "year": { "$gt": 2010 }, "limit": 10, "skip": 0 }, "fields": [ "_id", "_rev", "year", "title" ] }, "ddoc": "example-ddoc", "name": "example-index", "type": "json", "partitioned": false }
По умолчанию индекс JSON включает все документы, в которых присутствуют индексируемые поля, в том числе поля со значениями null.
-
GET/{db}/_index -
При выполнении запроса
GETк/{db}/_indexвозвращается список всех индексов базы данных. Помимо сведений, доступных через этот API, индексы также хранятся в проектных документах как представления. Проектные документы — это обычные документы, идентификаторы которых начинаются с_design/. Проектные документы можно получать и изменять так же, как любые другие документы, однако при использовании Mango в этом нет необходимости.- Параметры:
-
db – Имя базы данных.
- Заголовки ответа:
-
-
application/json
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
total_rows (number) – Количество индексов.
indexes (array) – Массив описаний индексов (см. раздел Определения индексов).
- Коды состояния:
-
200 OK – Успешно
400 Bad Request – Некорректный запрос
401 Unauthorized – Требуется разрешение на чтение
403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными
500 Internal Server Error – Ошибка выполнения
Запрос:
GET /db/_index HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 238 Content-Type: application/json Date: Thu, 01 Sep 2016 18:17:48 GMT Server: CouchDB (Erlang OTP/18) { "total_rows": 2, "indexes": [ { "ddoc": null, "name": "_all_docs", "type": "special", "def": { "fields": [ { "_id": "asc" } ] } }, { "ddoc": "_design/a5f4711fc9448864a13c81dc71e660b524d7410c", "name": "foo-index", "partitioned": false, "type": "json", "def": { "fields": [ { "foo": "asc" } ] } } ] }
-
DELETE/{db}/_index/{design_doc}/json/{name} -
- Параметры:
-
db – Имя базы данных.
design_doc – Имя проектного документа. Префикс
_design/указывать не требуется.name – Имя индекса.
- Заголовки ответа:
-
-
application/json
-
- Объект JSON ответа:
-
ok (string) – Значение “true” означает успешное выполнение.
- Коды состояния:
-
200 OK – Успешно
400 Bad Request – Некорректный запрос
401 Unauthorized – Требуется разрешение на запись
403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными
404 Not Found – Индекс не найден
500 Internal Server Error – Ошибка выполнения
Запрос:
DELETE /db/_index/_design/a5f4711fc9448864a13c81dc71e660b524d7410c/json/foo-index HTTP/1.1 Accept: */* Host: localhost:5984
Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 12 Content-Type: application/json Date: Thu, 01 Sep 2016 19:21:40 GMT Server: CouchDB (Erlang OTP/18) { "ok": true }
-
POST/{db}/_index/_bulk_delete -
- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
application/json
-
- Объект JSON запроса:
-
docids (array) – Список имён индексов для удаления.
w (number) – Кворум записи для каждого удаления. Значение по умолчанию:
2. Необязательно
- Заголовки ответа:
-
-
application/json
-
- Объект JSON ответа:
-
success (array) – Массив объектов, описывающих успешное удаление каждого индекса. Ключ
idсодержит имя индекса, аokуказывает, завершена ли операция.fail (array) – Массив объектов с описанием неудачных попыток удаления индексов. Ключ
idсодержит имя соответствующего индекса, аerrorописывает причину сбоя.
- Коды состояния:
-
200 OK – Успешно
400 Bad Request – Некорректный запрос
401 Unauthorized – Неавторизованный запрос к защищённому API
403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными
404 Not Found – Запрошенная база данных не найдена
500 Internal Server Error – Ошибка выполнения
Запрос:
POST /db/_index/_bulk_delete HTTP/1.1 Accept: application/json Content-Type: application/json Host: localhost:5984 { "docids": [ "_design/example-ddoc", "foo-index", "nonexistent-index" ] }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Length: 94 Content-Type: application/json Date: Thu, 01 Sep 2016 19:26:59 GMT Server: CouchDB (Erlang OTP/18) { "success": [ { "id": "_design/example-ddoc", "ok": true }, { "id": "foo-index", "ok": true } ], "fail": [ { "id": "nonexistent-index", "error": "not_found" } ] }
/{db}/_explain
-
POST/{db}/_explain -
Показывает, какой индекс используется запросом. Параметры такие же, как у _find.
- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
application/json
-
- Заголовки ответа:
-
-
application/json
Transfer-Encoding –
chunked
-
- Объект JSON в ответе:
-
covering (boolean) – Указывает, можно ли ответить на запрос, используя только данные, хранящиеся в индексе. Если
true, документы не извлекаются, что ускоряет ответ.dbname (string) – Имя базы данных.
index (object) – Индекс, использованный для выполнения запроса.
selector (object) – Использованный селектор запроса.
opts (object) – Использованные параметры запроса.
mrargs (object) – Аргументы, переданные базовому представлению.
limit (number) – Использованное значение параметра limit.
skip (number) – Использованное значение параметра skip.
fields (array) – Поля, которые должен вернуть запрос. Значение [] здесь означает все поля, поскольку в этом случае проекция не выполняется.
partitioned (boolean) – Разделена ли база данных на секции.
index_candidates (array) – Список всех найденных, но не выбранных для выполнения запроса индексов. Подробности см. в разделе о выборе индекса ниже.
selector_hints (object) – Дополнительные сведения о селекторе, помогающие оценить его пригодность.
- Коды состояния:
-
200 OK – Запрос успешно выполнен
400 Bad Request – Некорректный запрос
401 Unauthorized – Требуется разрешение на чтение
403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учетными данными
500 Internal Server Error – Ошибка выполнения
Запрос:
POST /movies/_explain HTTP/1.1 Accept: application/json Content-Type: application/json Content-Length: 168 Host: localhost:5984 { "selector": { "year": {"$gt": 2010} }, "fields": ["_id", "_rev", "year", "title"], "sort": [{"year": "asc"}], "limit": 2, "skip": 0 }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Thu, 01 Sep 2016 15:41:53 GMT Server: CouchDB (Erlang OTP) Transfer-Encoding: chunked { "dbname": "movies", "index": { "ddoc": "_design/0d61d9177426b1e2aa8d0fe732ec6e506f5d443c", "name": "0d61d9177426b1e2aa8d0fe732ec6e506f5d443c", "type": "json", "partitioned": false, "def": { "fields": [ { "year": "asc" } ] } }, "partitioned": false, "selector": { "year": { "$gt": 2010 } }, "opts": { "use_index": [], "bookmark": "nil", "limit": 2, "skip": 0, "sort": {}, "fields": [ "_id", "_rev", "year", "title" ], "partition": "", "r": 1, "conflicts": false, "stale": false, "update": true, "stable": false, "execution_stats": false, "allow_fallback": true }, "limit": 2, "skip": 0, "fields": [ "_id", "_rev", "year", "title" ], "mrargs": { "include_docs": true, "view_type": "map", "reduce": false, "partition": null, "start_key": [ 2010 ], "end_key": [ "<MAX>" ], "direction": "fwd", "stable": false, "update": true, "conflicts": "undefined" }, "covering": false "index_candidates": [ { "index": { "ddoc": null, "name": "_all_docs", "type": "special", "def": { "fields": [ { "_id": "asc" } ] } }, "analysis": { "usable": true, "reasons": [ { "name": "unfavored_type" } ], "ranking": 1, "covering": null } } ], "selector_hints": [ { "type": "json", "indexable_fields": [ "year" ], "unindexable_fields": [] } ] }
Выбор индекса
_find выбирает индекс для ответа на запрос, если только вы не указали индекс во время выполнения запроса. В этом разделе кратко описан процесс выбора индекса.
Примечание
Рекомендуется явно указывать индексы в запросах. Это позволяет избежать влияния новых индексов, которые могут быть добавлены в рабочей среде, на существующие запросы.
Примечание
Конечные точки _explain и _find используют одну и ту же логику выбора индекса. Однако _explain предоставляет более подробную информацию, поэтому его можно использовать для моделирования и исследования. В выводе сведения об исключении индексов содержатся в поле analysis объектов JSON под index_candidates. В analysis в поле reasons указана точная причина. Каждой причине соответствует определенный код, который будет упомянут в соответствующих подразделах ниже.
Выбор индекса выполняется в несколько этапов.
Этапы выбора индекса
Сначала собираются все индексы базы данных. В результат всегда входит специальная сущность all docs — первичный индекс по полю _id. Он используется как запасной вариант, если подходящих индексов не найдено, однако его применение не рекомендуется по соображениям производительности.
На следующем этапе исключаются частичные индексы, если только они не указаны в поле use_index объекта запроса.
Затем индексы фильтруются в зависимости от того, был ли выполнен глобальный запрос или запрос к секции. Индексам, область действия которых не соответствует запросу, назначается код причины scope_mismatch.
Оставшиеся индексы проходят ряд проверок на пригодность.
Для каждой проверки пригодности предусмотрен собственный код причины. Код field_mismatch используется, если поля индекса не соответствуют полям селектора. Код sort_order_mismatch означает, что запрошенная сортировка не соответствует индексу. Эти проверки зависят от типа индекса.
"special": индекс пригоден, если в запросе не указанsortили еслиsortуказано только для_id.-
"json": селектор не должен запрашивать полнотекстовый поиск произвольного вида с помощью оператора$text. В противном случае возвращается код причиныneeds_text_search.Все поля индекса должны упоминаться в
selectorилиsortзапроса.Любой
sort, указанный в запросе, должен соответствовать порядку полей в индексе. -
"text": индекс должен содержать поля, на которые ссылается"selector"или"sort"запроса.Индексы
"text"не работают с пустыми селекторами, и в ответ на такой запрос возвращается код причиныempty_selector.
После сбора пригодных индексов проверяется индекс, указанный пользователем. Если он существует и пригоден, все остальные пригодные индексы исключаются с кодом excluded_by_user. В противном случае он игнорируется, а процесс продолжается с остальными пригодными индексами.
Для разных типов индексов существует естественный порядок предпочтения: "json", "text", а затем "special". Пригодные индексы группируются по типам в этом порядке, и поиск сужается до элементов первой группы. Таким образом, даже если имеется индекс "text", подходящий для селектора, он может быть исключен, если найден индекс "json" с подходящими полями. Всем индексам, исключенным на этом этапе, присваивается код причины unfavored_type.
Для каждой базы данных может существовать только один индекс "text" и один индекс "special", поэтому в этих случаях выбор завершается на этом этапе. Для индексов "json" выполняется дополнительный этап, на котором выбирается оптимальный индекс.
Планировщик запросов анализирует селектор и находит индекс, поля и операторы которого наиболее точно соответствуют использованным в запросе. Это обозначается кодом причины less_overlap. Если подходят два или более индекса типа "json", предпочтение отдается индексу с наименьшим количеством полей. Это отмечается кодом причины too_many_fields. Если после этого остается два или более индекса-кандидата, выбирается индекс с первым по алфавиту именем. Это отражается кодом причины alphabetically_comes_after.
Код причины | Тип индекса | Описание |
|---|---|---|
| json | Существует другой подходящий индекс, имя которого предшествует имени этого индекса. |
| text | Индексы |
| any | Для указания индекса вручную использовался |
| any | Поля в |
| json, text | Частичные индексы можно выбрать только вручную. |
| json | В индексах имеется индекс с более подходящим набором полей для запроса. |
| json | Для использования оператора |
| json | Область действия запроса не совпадает с областью действия индекса. |
| json, special | Поля в |
| json | В индексе больше полей, чем в выбранном индексе. |
| any | Тип индекса не является предпочтительным. |
В выводе _explain также можно найти дополнительную информацию об индексах-кандидатах в объекте analysis.
Атрибут
ranking(number) задает приблизительный порядок элементов списка, который можно использовать для их упорядочивания. Это положительное целое число; чем оно больше, тем ниже индекс находится в очереди. Выбранный индекс всегда имеет ранг0, а все остальные располагаются после него. Ранг отражает итоговую позицию данного индекса-кандидата в описанном выше отборе.Атрибут
usable(Boolean) указывает, пригоден ли индекс. Это позволяет разделить индексы-кандидаты по их пригодности для данного селектора.Атрибут
covering(Boolean) указывает, является ли индекс покрывающим. Это свойство вычисляется только для индексов"json", а во всех остальных случаях имеет значениеnull.
Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/api/database/find.html