Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ricerca K-Nearest Neighbor (k-NN) su Amazon Service OpenSearch
Acronimo dell'algoritmo k-Nearest Neighbors associato, k-NN for OpenSearch Amazon Service consente di cercare punti in uno spazio vettoriale e trovare i «vicini più vicini» per tali punti in base alla distanza euclidea o alla somiglianza del coseno. Nei casi d'uso sono inclusi suggerimenti (ad esempio, una funzionalità "altri brani che potrebbero piacerti" in un'applicazione musicale), il riconoscimento delle immagini e il rilevamento delle frodi.
Nota
Questa documentazione descrive la compatibilità delle versioni tra OpenSearch Service e varie versioni del plug-in k-NN, nonché le limitazioni relative all'utilizzo del plug-in con il servizio gestito. OpenSearch Per una documentazione completa del plugin k-NN, inclusi esempi semplici e complessi, riferimenti ai parametri e il riferimento API completo per il plug-in, consulta la documentazione open source. OpenSearch
Utilizza le seguenti tabelle per trovare la versione del plugin k-NN in esecuzione sul tuo dominio Amazon OpenSearch Service. Ogni versione del plugin k-NN corrisponde a una OpenSearch
OpenSearch | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OpenSearch versione | Versione plug-in k-NN | Funzionalità significative | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.13 | 2,130,0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.11 | 211,0,0 |
Aggiunto il supporto per |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.9 | 2,9,0,0 | Implementati vettori di byte k-NN e filtraggio efficiente con il motore Faiss |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.7 | 2.7.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.5 | 2,5,0,0 | Esteso SystemIndexPlugin per l'indice del sistema modello K-NN, aggiunte estensioni di file specifiche per Lucene al core HybridFS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.3 | 2.3.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.3 | 1,30.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.2 | 1,20.0 | Aggiunto il supporto per la biblioteca Faiss |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.1 | 1.1.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 |
1.0.0.0 |
Le REST API rinominate, pur supportando la compatibilità con le versioni precedenti, hanno rinominato lo spazio dei nomi da opendistro a opensearch |
Elasticsearch | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Versione di Elasticsearch | Versione plug-in k-NN | Caratteristiche da tenere in considerazione | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.1 |
1,30.0 |
Distanza Euclidea | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.4 |
1,40.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.7 |
1,80.0 |
Similitudine coseno | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.8 |
1,9,0,0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.9 |
1.11.0.0 |
API di riscaldamento, punteggio personalizzato | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7,10 |
1,130,0 |
Distanza di marcia, distanza di norma L1, scripting painless |
Nozioni di base su k-NN
Per utilizzare k-NN, è necessario creare un indice con l'impostazione index.knn
e aggiungere uno o più campi del tipo di dati 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 } } } }
Il tipo di dati knn_vector
supporta un singolo elenco di fino a 10.000 numeri in virgola mobile, con il numero di numeri in virgola mobile definito dal parametro dimension
richiesto. Dopo aver creato l'indice, aggiungi alcuni dati.
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 }
Quindi puoi cercare i dati utilizzando il tipo di query knn
.
GET my-index/_search { "size": 2, "query": { "knn": { "
my_vector2
": { "vector": [2, 3, 5, 6], "k": 2 } } } }
In questo caso, k
è il numero di neighbors che la query deve restituire, ma è necessario includere anche l'opzione size
. In caso contrario, vengono ottenuti i risultati k
per ogni partizione (e ogni segmento) anziché i risultati k
per l'intera query. k-NN supporta un valore massimo di k
pari a 10.000.
Se si combina la query knn
con altre clausole, è possibile che vengano restituiti meno risultati k
. In questo esempio, la clausola post_filter
riduce il numero di risultati da 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 } } } }
Se devi gestire un grande volume di query mantenendo prestazioni ottimali, puoi utilizzare l'_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 }} } }
Il video seguente mostra come configurare ricerche vettoriali di massa per le query K-NN.
Differenze, regolazione e limitazioni di k-NN
OpenSearch consente di modificare tutte le impostazioni k-NN utilizzando_cluster/settings
In OpenSearch Service, puoi modificare tutte le impostazioni tranne knn.memory.circuit_breaker.enabled
eknn.circuit_breaker.triggered
. Le statistiche k-NN sono incluse come metriche di Amazon CloudWatch .
In particolare, confronta la KNNGraphMemoryUsage
metrica su ciascun nodo di dati con la knn.memory.circuit_breaker.limit
statistica e la RAM disponibile per il tipo di istanza. OpenSearch Il servizio utilizza metà della RAM di un'istanza per l'heap Java (fino a una dimensione dell'heap di 32 GiB). Per impostazione predefinita, k-NN utilizza fino al 50% della metà rimanente, quindi un tipo di istanza con 32 GiB di RAM può ospitare 8 GiB di grafici (32 * 0,5 * 0,5). Le prestazioni possono risentirne se l'utilizzo della memoria grafica supera questo valore.
Non è possibile migrare un indice k-NN verso una conservazione a freddo se l'indice UltraWarmutilizza k-NN () approssimativo."index.knn": true
Se index.knn
è impostato su false
(k-NN preciso