As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Pesquisa de K-Nearest Neighbor (k-NN) no Amazon Service OpenSearch
Abreviação do algoritmo associado de k-vizinhos mais próximos, o k-NN for Amazon OpenSearch Service permite pesquisar pontos em um espaço vetorial e encontrar os “vizinhos mais próximos” desses pontos por distância euclidiana ou similaridade de cosseno. Os casos de uso incluem recomendações (por exemplo, um recurso de “outras músicas que você pode gostar” em um aplicativo de música), reconhecimento de imagem e detecção de fraudes.
nota
Esta documentação descreve a compatibilidade de versões entre o OpenSearch Serviço e várias versões do plug-in k-NN, bem como as limitações ao usar o plug-in com o Serviço gerenciado OpenSearch . Para obter uma documentação abrangente do plug-in k-NN, incluindo exemplos simples e complexos, referências de parâmetros e a referência completa da API para o plug-in, consulte a documentação de código OpenSearch aberto.
Use as tabelas a seguir para encontrar a versão do plug-in k-NN em execução no seu domínio do Amazon OpenSearch Service. Cada versão do plug-in k-NN corresponde a uma versão OpenSearch
OpenSearch | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OpenSearch versão | Versão do plug-in k-NN | Recursos notáveis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.13 | 2.13.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.11 | 2.11.0.0 |
Suporte adicionado para |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.9 | 2.9.0.0 | Implementou vetores de bytes k-NN e filtragem eficiente com o mecanismo Faiss |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.7 | 2.7.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2,5 | 2.5.0.0 | Estendido SystemIndexPlugin para o índice de sistema do modelo k-NN, adicionou extensões de arquivo específicas do Lucene ao núcleo do HybridFS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.3 | 2.3.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.3 | 1.3.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.2 | 1.2.0.0 | Adicionado suporte para a biblioteca Faiss |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.1 | 1.1.0.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1,0 |
1.0.0.0 |
Renomeação das APIs REST em termpos de compatibilidade com versões anteriores, renomeação do namespace de opendistro para opensearch |
Elasticsearch | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Versão do Elasticsearch | Versão do plug-in k-NN | Recursos notáveis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.1 |
1.3.0.0 |
Distância euclidiana | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.4 |
1.4.0.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.7 |
1.8.0.0 |
Similaridade de cossenos | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.8 |
1.9.0.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.9 |
1.11.0.0 |
API de Warmup, pontuação personalizada | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.10 |
1.13.0.0 |
Distância de Hamming, distância L1 Norm, desenvolvimento de scripts Painless |
Conceitos básicos do k-NN
Para usar o k-NN, é necessário criar um índice com a configuração index.knn
e adicionar um ou mais campos do tipo de dados 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 } } } }
O tipo de dados knn_vector
oferece suporte a uma única lista de até 10.000 flutuantes, com o número de flutuantes definido pelo parâmetro dimension
. Depois de criar o índice, adicione alguns dados a ele.
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 }
Em seguida, você poderá pesquisar os dados usando o tipo de consulta knn
.
GET my-index/_search { "size": 2, "query": { "knn": { "
my_vector2
": { "vector": [2, 3, 5, 6], "k": 2 } } } }
Nesse caso, k
é o número de vizinhos a serem retornados pela consulta, mas também é necessário incluir a opção size
. Caso contrário, você obterá k
resultados para cada fragmento (e cada segmento) em vez de k
resultados para toda a consulta. O k-NN oferece suporte a um valor de k
máximo de 10.000.
Se você misturar a consulta knn
com outras cláusulas, poderá receber menos do que k
resultados. Neste exemplo, a cláusula post_filter
reduz o número de resultados de 2 para 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 precisar lidar com um grande volume de consultas e, ao mesmo tempo, manter o desempenho ideal, você pode usar a API _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 }} } }
O vídeo a seguir demonstra como configurar pesquisas vetoriais em massa para consultas K-NN.
Diferenças, ajustes e limitações do k-NN
OpenSearch permite que você modifique todas as configurações do k-NN_cluster/settings
API. No OpenSearch Serviço, você pode alterar todas as configurações, exceto knn.memory.circuit_breaker.enabled
knn.circuit_breaker.triggered
e. As estatísticas k-NN são incluídas como métricas da Amazon CloudWatch .
Em particular, verifique a KNNGraphMemoryUsage
métrica em cada nó de dados em relação à knn.memory.circuit_breaker.limit
estatística e à RAM disponível para o tipo de instância. OpenSearch O serviço usa metade da RAM de uma instância para o heap Java (até um tamanho de heap de 32 GiB). Por padrão, o k-NN usa até 50% da metade restante, portanto, um tipo de instância com 32 GiB de RAM pode acomodar 8 GiB de gráficos (32 * 0,5 * 0,5). A performance poderá ser prejudicada se o uso da memória do gráfico exceder esse valor.
Você não pode migrar um índice k-NN para UltraWarmum armazenamento refrigerado se o índice usar k-NN () aproximado."index.knn": true
Se index.knn
estiver definido como false
(k-NN exato