API поиска kNN
Устарело в 8.4.0.
API поиска kNN заменён на knn опцию в API поиска.
Выполняет поиск k-ближайших соседей (kNN) и возвращает соответствующие документы.
GET my-index/_knn_search
{
"knn": {
"field": "image_vector",
"query_vector": [0.3, 0.1, 1.2],
"k": 10,
"num_candidates": 100
},
"_source": ["name", "file_type"]
} Запрос
GET <target>/_knn_search
POST <target>/_knn_search
Предварительные условия
- Если включены функции безопасности Elasticsearch, у вас должны быть
readправа на доступ к индексу для целевого потока данных, индекса или псевдонима.
Описание
API поиска kNN выполняет поиск k-ближайших соседей (kNN) по полю dense_vector. Учитывая вектор запроса, он находит k ближайших векторов и возвращает соответствующие документы в качестве результатов поиска.
Elasticsearch использует алгоритм HNSW для обеспечения эффективного поиска kNN. Как и большинство алгоритмов kNN, HNSW является приближённым методом, жертвующим точностью результатов для повышения скорости поиска. Это означает, что возвращаемые результаты не всегда являются истинными k ближайшими соседями.
API поиска kNN поддерживает ограничение поиска с помощью фильтра. Поиск вернёт верхние k документов, которые также соответствуют запросу фильтра.
Параметры пути
-
<target> - (Необязательно, строка) Список потоков данных, индексов и псевдонимов для поиска, разделённых запятыми. Поддерживаются подстановки (
*). Для поиска всех потоков данных и индексов используйте*или_all.
Параметры запроса
-
routing - (Необязательно, строка) Пользовательское значение, используемое для маршрутизации операций на определённый фрагмент.
Тело запроса
-
filter - (Необязательно, объект Query DSL) Запрос для фильтрации документов, которые могут соответствовать. Поиск kNN вернёт лучшие
kдокументов, которые также соответствуют этому фильтру. Значение может быть одиночным запросом или списком запросов. Еслиfilterне указан, все документы могут соответствовать. -
knn -
(Обязательно, объект) Определяет запрос kNN для выполнения.
Свойства объекта
knn-
field - (Обязательно, строка) Название векторного поля для поиска. Должно быть полем
dense_vectorс включенным индексированием. -
k - (Необязательно, целое число) Количество ближайших соседей, которые нужно вернуть в качестве лучших результатов. Это значение должно быть меньше или равно
num_candidates. По умолчаниюsize. -
num_candidates - (Необязательно, целое число) Количество кандидатов на ближайших соседей для рассмотрения на каждый фрагмент. Должно быть больше
k, илиsizeеслиkопущено, и не должно превышать 10 000. Elasticsearch собираетnum_candidatesрезультатов с каждого фрагмента, а затем объединяет их, чтобы найти лучшиеkрезультатов. Увеличениеnum_candidates, как правило, улучшает точность итоговыхkрезультатов. По умолчаниюMath.min(1.5 * k, 10_000). -
query_vector - (Обязательно, массив чисел с плавающей точкой или строка) Вектор запроса. Должен иметь такое же количество измерений, что и векторное поле, по которому вы ищете. Должен быть либо массивом чисел с плавающей точкой, либо шестнадцатеричным кодированным байтовым вектором.
-
-
docvalue_fields -
(Необязательно, массив строк и объектов) Массив шаблонов полей. Запрос возвращает значения для имён полей, соответствующих этим шаблонам, в свойстве
hits.fieldsответа.Вы можете указать элементы в массиве как строку или объект. Смотрите Поля значений документов.
Свойства объектов
docvalue_fields-
field - (Обязательно, строка) Шаблон подстановки. Запрос возвращает значения документов для имён полей, соответствующих этому шаблону.
-
format -
(Необязательно, строка) Формат, в котором возвращаются значения документов.
Для полей типа дата вы можете указать формат даты дата
format. Для числовых полей ( числовые поля) вы можете указать шаблон DecimalFormat.Для других типов данных полей этот параметр не поддерживается.
-
-
fields -
(Необязательно, массив строк и объектов) Массив шаблонов полей. Запрос возвращает значения для имён полей, соответствующих этим шаблонам, в свойстве
hits.fieldsответа.Вы можете указать элементы в массиве как строку или объект. Смотрите параметр
fields.Свойства объектов
fields-
field - (Обязательно, строка) Поле для возврата. Поддерживает подстановки (
*). -
format -
(Необязательно, строка) Формат для полей даты и геопространственных данных. Другие типы полей не поддерживают этот параметр.
Поля
dateиdate_nanosпринимают формат даты. Поляgeo_pointиgeo_shapeпринимают:-
geojson(по умолчанию) - GeoJSON
-
wkt - Well Known Text
-
mvt(<spec>) -
Бинарная плитка Mapbox vector. API возвращает плитку в виде строки, закодированной в base64.
<spec>имеет формат<zoom>/<x>/<y>с двумя необязательными суффиксами:@<extent>и/или:<buffer>. Например,2/0/1или2/0/1@4096:5.mvtпараметры-
<zoom> - (Обязательно, целое число) Уровень масштабирования плитки. Принимает значения от
0до29. -
<x> - (Обязательно, целое число) Координата X плитки.
-
<y> - (Обязательно, целое число) Координата Y плитки.
-
<extent> - (Необязательно, целое число) Размер, в пикселях, стороны плитки. Векторные плитки квадратные с равными сторонами. По умолчанию
4096. -
<buffer> - (Необязательно, целое число) Размер, в пикселях, буфера обрезки за пределами плитки. Это позволяет визуализаторам избежать артефактов контура от геометрий, которые простираются за пределы области плитки. По умолчанию
5.
-
-
-
-
_source -
(Необязательно) Указывает, какие источниковые поля возвращаются для совпадающих документов. Эти поля возвращаются в свойстве
hits._sourceответа. По умолчаниюtrue. Смотрите фильтрацию источника.Допустимые значения для
_source-
true - (Булево) Возвращается весь источник документа.
-
false - (Булево) Источник документа не возвращается.
-
<wildcard_pattern> - (строка или массив строк) Шаблон подстановки (
*) или массив шаблонов, содержащих поля источника для возврата. -
<object> -
(объект) Объект, содержащий список полей источника для включения или исключения.
Свойства для
<object>-
excludes -
(строка или массив строк) Шаблон подстановки (
*) или массив шаблонов, содержащих поля источника для исключения из ответа.Вы также можете использовать это свойство для исключения полей из подмножества, указанного в свойстве
includes. -
includes -
(строка или массив строк) Шаблон подстановки (
*) или массив шаблонов, содержащих поля источника для возврата.Если это свойство указано, возвращаются только эти поля источника. Вы можете исключить поля из этого подмножества, используя свойство
excludes.
-
-
-
stored_fields -
(Необязательно, строка) Список хранимых полей через запятую, которые нужно вернуть в составе совпадения. Если поля не указаны, хранимые поля не включаются в ответ. Смотрите Хранимые поля.
Если этот параметр указан, параметр
_sourceпо умолчанию устанавливается вfalse. Вы можете передать_source: true, чтобы вернуть как поля источника, так и хранимые поля в ответе поиска.
Тело ответа
Ответ на поиск kNN имеет точно такой же структуру, как и ответ API поиска. Однако некоторые разделы имеют значение, специфичное для поиска kNN:
- Свойство
_scoreдокумента определяется по сходству между запросом и векторным документом. Смотритеsimilarity. - Объект
hits.totalсодержит общее количество ближайших соседей, которые рассматривались, что равноnum_candidates * num_shards.hits.total.relationвсегда будетeq, что указывает на точное значение.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/knn-search-api.html