Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
K-nn for Amazon OpenSearch Service, abreviatura de su algoritmo asociado de k-vecinos más cercanos, te permite buscar puntos en un espacio vectorial y encontrar los «vecinos más cercanos» de esos puntos por distancia euclidiana o similitud de coseno. Los casos de uso incluyen recomendaciones (por ejemplo, una característica de “otras canciones que podrían gustarte” en una aplicación de música), reconocimiento de imágenes y detección de fraude.
nota
En esta documentación se describe la compatibilidad de versiones entre el OpenSearch Servicio y varias versiones del complemento K-nn, así como las limitaciones a la hora de utilizar el complemento con el Servicio gestionado. OpenSearch Para obtener una documentación completa del complemento k-NN, que incluye ejemplos simples y complejos, referencias de parámetros y la API referencia completa del complemento, consulte la documentación de código abierto. OpenSearch
Usa las siguientes tablas para encontrar la versión del complemento k-NN que se ejecuta en tu dominio de Amazon OpenSearch Service. Cada versión del complemento k-NN corresponde a una o a una OpenSearch
OpenSearch versión | Versión del complemento k-NN | Características notables |
---|---|---|
2.13 | 2.13.0.0 | |
2.11 | 2.11.0.0 |
Se agregó soporte para |
2.9 | 2.9.0.0 | Se implementaron vectores de bytes k-NN y un filtrado eficiente con el motor Faiss |
2.7 | 2.7.0.0 | |
2,5 | 2.5.0.0 | Ampliado SystemIndexPlugin para el índice de sistemas modelo K-nN, se han añadido extensiones de archivo específicas para Lucene al núcleo de HybridFS |
2.3 | 2.3.0.0 | |
1.3 | 1.3.0.0 | |
1.2 | 1.2.0.0 | Se agregó compatibilidad con la biblioteca Faiss |
1.1 | 1.1.0.0 | |
1.0 |
1.0.0.0 |
Se cambió el nombre del espacio de nombres REST APIs aunque se admitía la compatibilidad con versiones anteriores. opendistro opensearch |
Versión de Elasticsearch | Versión del complemento k-NN | Características notables |
---|---|---|
7.1 |
1.3.0.0 |
Distancia euclidiana |
7.4 |
1.4.0.0 |
|
7.7 |
1.8.0.0 |
Similitud coseno |
7.8 |
1.9.0.0 |
|
7.9 |
1.11.0.0 |
Calentamiento, puntuación personalizada API |
7.10 |
1.13.0.0 |
Distancia de Hamming, distancia de norma L1, scripting Painless |
Introducción a k-NN
Para utilizar k-NN, debe crear un índice con la configuración index.knn
y agregar uno o más campos del tipo de datos knn_vector
.
PUT my-index
{
"settings": {
"index.knn": true
},
"mappings": {
"properties": {
"my_vector1
": {
"type": "knn_vector",
"dimension": 2
},
"my_vector2
": {
"type": "knn_vector",
"dimension": 4
}
}
}
}
El tipo de datos knn_vector
admite una sola lista de hasta 10 000 flotadores, con el número de flotadores definido por el parámetro dimension
requerido. Después de crear el índice, agregue algunos datos.
POST _bulk
{ "index": { "_index": "my-index", "_id": "1" } }
{ "my_vector1": [1.5, 2.5], "price": 12.2 }
{ "index": { "_index": "my-index", "_id": "2" } }
{ "my_vector1": [2.5, 3.5], "price": 7.1 }
{ "index": { "_index": "my-index", "_id": "3" } }
{ "my_vector1": [3.5, 4.5], "price": 12.9 }
{ "index": { "_index": "my-index", "_id": "4" } }
{ "my_vector1": [5.5, 6.5], "price": 1.2 }
{ "index": { "_index": "my-index", "_id": "5" } }
{ "my_vector1": [4.5, 5.5], "price": 3.7 }
{ "index": { "_index": "my-index", "_id": "6" } }
{ "my_vector2": [1.5, 5.5, 4.5, 6.4], "price": 10.3 }
{ "index": { "_index": "my-index", "_id": "7" } }
{ "my_vector2": [2.5, 3.5, 5.6, 6.7], "price": 5.5 }
{ "index": { "_index": "my-index", "_id": "8" } }
{ "my_vector2": [4.5, 5.5, 6.7, 3.7], "price": 4.4 }
{ "index": { "_index": "my-index", "_id": "9" } }
{ "my_vector2": [1.5, 5.5, 4.5, 6.4], "price": 8.9 }
A continuación, puede buscar los datos mediante el tipo de consulta knn
.
GET my-index/_search
{
"size": 2,
"query": {
"knn": {
"my_vector2
": {
"vector": [2, 3, 5, 6],
"k": 2
}
}
}
}
En este caso, k
es el número de vecinos que desea que devuelva la consulta, pero también debe incluir la opción size
. De lo contrario, obtendrá k
resultados para cada partición (y cada segmento) en lugar de k
resultados para toda la consulta. k-NN admite un valor de k
máximo de 10 000.
Si mezcla la consulta knn
con otras cláusulas, es posible que reciba menos resultados k
. En este ejemplo, la cláusula post_filter
reduce el número de resultados de 2 a 1.
GET my-index/_search
{
"size": 2,
"query": {
"knn": {
"my_vector2
": {
"vector": [2, 3, 5, 6],
"k": 2
}
}
},
"post_filter": {
"range": {
"price
": {
"gte": 6,
"lte": 10
}
}
}
}
Si necesita gestionar un gran volumen de consultas y, al mismo tiempo, mantener un rendimiento óptimo, puede _msearch
GET _msearch
{ "index": "my-index"}
{ "query": { "knn": {"my_vector2":{"vector": [2, 3, 5, 6],"k":2 }} } }
{ "index": "my-index", "search_type": "dfs_query_then_fetch"}
{ "query": { "knn": {"my_vector1":{"vector": [2, 3],"k":2 }} } }
En el siguiente video se muestra cómo configurar búsquedas vectoriales masivas para consultas K-NN.
Diferencias, ajuste y limitaciones de k-NN
OpenSearch le permite modificar todos los ajustes de K-nn_cluster/settings
API En el OpenSearch Servicio, puedes cambiar todos los ajustes excepto knn.memory.circuit_breaker.enabled
yknn.circuit_breaker.triggered
. Las estadísticas de K-nn se incluyen como métricas de Amazon CloudWatch .
En concreto, compara la KNNGraphMemoryUsage
métrica de cada nodo de datos con la knn.memory.circuit_breaker.limit
estadística y la información disponible RAM para el tipo de instancia. OpenSearch El servicio utiliza la mitad de una instancia RAM para el montón de Java (hasta un tamaño de pila de 32 GiB). De forma predeterminada, k-NN utiliza hasta el 50% de la mitad restante, por lo que un tipo de instancia con 32 GiB de RAM puede alojar 8 GiB de gráficos (32 * 0,5 * 0,5). El rendimiento puede verse afectado si el uso de la memoria gráfica supera este valor.
Puede migrar un índice k-NN creado en la versión 2.x o posterior a un dominio con la versión 2.17 o posterior o almacenarlo en frío en un dominio con la versión 2.17 UltraWarmo posterior.
La API de borrado de caché y las API de calentamiento para los índices k-NN están bloqueadas para los índices calientes. Cuando se inicia la primera consulta para el índice, descarga los archivos de gráficos de Amazon S3 y carga el gráfico en la memoria. Del mismo modo, cuando TTL los gráficos caducan, los archivos se eliminan automáticamente de la memoria.