View a markdown version of this page

Trabalho com coleções de pesquisa vetorial - OpenSearch Serviço Amazon

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á.

Trabalho com coleções de pesquisa vetorial

Com o tipo de coleção de pesquisa vetorial no OpenSearch Serverless, você pode realizar pesquisas de similaridade escaláveis e de alto desempenho. Você pode criar experiências modernas de busca aumentada de machine learning (ML) e aplicativos generativos de inteligência artificial (IA) sem gerenciar a infraestrutura de banco de dados vetorial subjacente.

Os casos de uso de coleções de pesquisa vetorial incluem pesquisas de imagens, pesquisas de documentos, recuperação de músicas, recomendações de produtos, pesquisas de vídeo, pesquisas baseadas em localização, detecção de fraudes e detecção de anomalias.

O mecanismo vetorial do OpenSearch Serverless usa o recurso de pesquisa k-vizinho mais próximo (k-NN) em. OpenSearch Você obtém a mesma funcionalidade com a simplicidade de um ambiente sem servidor. O mecanismo é compatível com a API do plug-in k-NN. Com essas operações, você pode usar pesquisa de texto completo, filtragem avançada, agregações, consultas geoespaciais e consultas aninhadas para acelerar a recuperação de dados e melhorar os resultados da pesquisa.

O mecanismo vetorial fornece métricas de distância, como distância euclidiana, similaridade de cosseno, similaridade de produtos escalares, e também pode acomodar 16.000 dimensões. Você pode armazenar campos com vários tipos de dados para metadados, como números, booleanos, datas, palavras-chave e pontos geográficos. Também é possível armazenar campos com texto para obter informações descritivas e adicionar mais contexto aos vetores armazenados. A colocalização conjunta dos tipos de dados reduz a complexidade, aumenta a capacidade de manutenção e evita a duplicação de dados, desafios de compatibilidade de versões e problemas de licenciamento.

NextGen coleções de pesquisa vetorial

NextGen a pesquisa vetorial é dimensionada sob demanda com base na carga de trabalho para otimizar o equilíbrio entre custo e desempenho. Somente os blocos de dados necessários para atender às solicitações de pesquisa ativas são carregados na memória, e os trabalhadores escalam dinamicamente com base na memória e nos recursos de CPU necessários. Quando a coleção está ociosa sem solicitações contínuas, tanto a indexação quanto a pesquisa são reduzidas a zero, proporcionando economia adicional. Por padrão, NextGen inclui otimizações integradas que melhoram o recall e reduzem o custo e a latência.

  • ID de documento personalizada — IDs de documentos personalizados são compatíveis com NextGen coleções, facilitando que os clientes realizem atualizações ou indexem documentos com IDs fornecidas pelo usuário.

  • Índices de compressão de 32x — Todos os índices são criados com a técnica avançada de compressão de 32x por padrão. Você pode substituir o nível de compactação padrão e selecionar qualquer nível de compactação compatível: 1x, 2x, 8x, 16x ou 32x (padrão).

  • Aceleração de criação de índice — a aceleração de GPU é ativada por padrão para ajudar a criar índices vetoriais de grande escala com mais rapidez e eficiência. Ele reduz o tempo necessário para indexar dados em índices vetoriais, proporcionando uma experiência de indexação de alto rendimento e economia de custos. Os recursos da GPU são provisionados somente quando necessário durante as operações de criação do índice. Você pode controlar o uso da GPU por índice usando a configuraçãoindex.knn.remote_index_build.enabled. Para obter mais informações, consulte Aceleração por GPU para indexação vetorial.

  • API simplificada — as coleções de pesquisa NextGen vetorial não exigem os mode parâmetros engine e nos mapeamentos de índice. O sistema determina automaticamente a configuração ideal internamente, reduzindo a complexidade da criação do índice.

  • Resposta de pesquisa otimizada — Por padrão, as respostas de pesquisa em coleções de NextGen vetores excluem o vetor original dos resultados. Isso reduz a latência de pesquisa de ponta a ponta e o tamanho da carga útil de resposta. Para incluir vetores na resposta da pesquisa, consulteRecupere o documento completo com vetores.

  • NextGen coleções de vetores têm uma latência de leitura após gravação () refresh_interval de 10 segundos.

Conceitos básicos de coleções de pesquisa de vetores

Neste tutorial, você conclui as etapas a seguir para armazenar, pesquisar e recuperar incorporações vetoriais em tempo real:

Etapa 1: configurar permissões

Para concluir este tutorial (e usar o OpenSearch Serverless em geral), você deve ter as permissões corretas AWS Identity and Access Management (IAM). Neste tutorial, você criará uma coleção, carregará e pesquisará dados e, em seguida, excluirá a coleção.

Seu usuário ou função deve ter uma política baseada em identidade anexada com as seguintes permissões mínimas:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "aoss:CreateCollection", "aoss:ListCollections", "aoss:BatchGetCollection", "aoss:DeleteCollection", "aoss:CreateAccessPolicy", "aoss:ListAccessPolicies", "aoss:UpdateAccessPolicy", "aoss:CreateSecurityPolicy", "iam:ListUsers", "iam:ListRoles" ], "Effect": "Allow", "Resource": "*" } ] }

Para obter mais informações sobre as permissões do IAM OpenSearch sem servidor, consulte. Identity and Access Management para Amazon OpenSearch Serverless

Etapa 2: criar uma coleção

Para criar uma nova coleção, siga o fluxo unificado de criação da coleção (NextGen Express Create), que configura automaticamente as políticas de criptografia, rede e acesso a dados. Para instruções, consulte Criar uma NextGen coleção (Express Create).

No restante deste tutorial, a coleção de exemplo tem um nome housing e é uma coleção de pesquisa NextGen vetorial.

nota

Se você optar por criar uma coleção vetorial clássica, consulte Trabalhando com coleções vetoriais clássicas os procedimentos específicos das coleções clássicas.

Etapa 3: Transferir e pesquisar dados

Um índice é uma coleção de documentos com um esquema de dados comum que fornece uma maneira de armazenar, pesquisar e recuperar suas incorporações vetoriais e outros campos. Você pode criar e carregar dados para índices em uma coleção OpenSearch sem servidor usando o console Dev Tools em OpenSearch painéis ou uma ferramenta HTTP, como Postman ou awscurl. Este tutorial usa o Dev Tools. Para acesso programático usando o SDK do Python, consulte. Ingestão de dados em coleções Amazon OpenSearch Serverless

Para indexar e pesquisar dados na coleção habitacional
  1. Para criar um índice para sua nova coleção, envie a seguinte solicitação no console do Dev Tools. Por padrão, isso cria um índice com distância euclidiana e compressão de 32x.

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. Para usar um nível de compactação diferente, defina compression_level no mapeamento de campo. O exemplo a seguir cria um índice compression_level definido como 1x.

    PUT housing-index-1x { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "compression_level": "1x", "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }

    Os níveis de compressão suportados são 1x, 2x, 8x, 16x e 32x.

  3. Para indexar documentos emhousing-index, você pode usar uma ID gerada pelo sistema (POST) ou uma ID fornecida pelo usuário (PUT).

    # System-generated document ID POST housing-index/_doc { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } # User-provided document ID PUT housing-index/_doc/100 { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  4. Para pesquisar propriedades semelhantes às do seu índice, envie a seguinte consulta. Por padrão, a resposta da pesquisa exclui o vetor original de _source para reduzir a latência e o tamanho da carga útil.

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }

    A resposta exclui o housing-vector campo de_source:

    { "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }

Recupere o documento completo com vetores

Para substituir o comportamento padrão, _source defina como true na solicitação de pesquisa. Você também pode usar as excludes opçõesincludes/de _source para recuperar campos específicos.

GET housing-index/_search { "size": 5, "_source": true, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }

A resposta agora inclui o housing-vector campo em_source:

{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "housing-vector": [10, 20, 30], "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }

Etapa 4: Excluir a coleção

Como a coleção de habitações é para fins de teste, exclua-a quando terminar de experimentar.

Para excluir uma coleção OpenSearch sem servidor
  1. Abra o console do Amazon OpenSearch Service.

  2. No painel de navegação esquerdo, escolha Coleções e selecione a coleção habitacional.

  3. Selecione Excluir para confirmar a exclusão.

Pesquisa com filtro

Você pode usar filtros para refinar os resultados da pesquisa semântica. Para criar um índice e realizar uma pesquisa com filtro nos seus documentos, substitua Carregar e pesquisar dados no tutorial anterior pelas instruções a seguir. As outras etapas permanecem as mesmas. Para saber mais sobre os filtros, consulte pesquisa k-NN com filtros.

Para indexar e pesquisar dados na coleção habitacional
  1. Para criar um único índice para a coleção, envie a seguinte solicitação no console do Dev Tools:

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2", "method": { "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. Para indexar um único documento em housing-index-filtered, envie a seguinte solicitação:

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. Para pesquisar seus dados em busca de um apartamento em Seattle por um preço específico e dentro de uma determinada distância de um ponto geográfico, envie a seguinte solicitação:

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

Limitações

  • A pesquisa radial não é suportada em índices NextGen vetoriais que usam compressão de 32x.

Trabalhando com coleções vetoriais clássicas

As coleções vetoriais clássicas são a geração original da pesquisa vetorial OpenSearch sem servidor. Use os procedimentos desta seção se você tiver uma coleção vetorial Clássica existente. Para novas coleções, recomendamos NextGen — consulte Criação de coleções para criar uma coleção NextGen vetorial.

nota
  • As coleções Amazon OpenSearch Serverless Classic oferecem suporte à quantização escalar Faiss de 16 bits, que realiza conversões entre vetores flutuantes de 32 bits e vetores de 16 bits. Para saber mais, consulte Quantização escalar de Faiss de 16-bits. Você também pode usar vetores binários para reduzir os custos de memória. Para saber mais, consulte Vetores binários.

  • As coleções do Amazon OpenSearch Serverless Classic oferecem suporte à pesquisa vetorial baseada em disco, o que reduz significativamente os custos operacionais de cargas de trabalho vetoriais em ambientes com pouca memória. Para obter mais informações, consulte Pesquisa Disk-based vetorial.

Os exemplos a seguir se aplicam às coleções vetoriais clássicas, que usam o nmslib mecanismo por padrão e incluem o vetor original nas respostas de pesquisa.

Para indexar e pesquisar dados em uma coleção de habitação clássica
  1. Para criar um índice para sua coleção Classic, envie a seguinte solicitação no console do Dev Tools. Por padrão, isso cria um índice com o nmslib motor e a distância euclidiana.

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. Para indexar um único documento em housing-index, envie a seguinte solicitação:

    POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. Para pesquisar propriedades semelhantes às do seu índice, envie a seguinte consulta:

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }

Para criar um índice e realizar uma pesquisa filtrada, use os exemplos a seguir. Para saber mais sobre os filtros, consulte pesquisa k-NN com filtros.

Para indexar e realizar uma pesquisa filtrada em uma coleção de habitações clássicas
  1. Para criar um único índice para a coleção, envie a seguinte solicitação no console do Dev Tools:

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. Para indexar um único documento em housing-index-filtered, envie a seguinte solicitação:

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. Para pesquisar seus dados em busca de um apartamento em Seattle por um preço específico e dentro de uma determinada distância de um ponto geográfico, envie a seguinte solicitação:

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

As coleções vetoriais clássicas têm as seguintes limitações:

  • As coleções de pesquisa vetorial não são compatíveis com o mecanismo Apache Lucene ANN.

  • As coleções de pesquisa vetorial suportam somente o algoritmo HNSW com o Faiss. Eles não suportam fertilização in vitro ou fertilização in vitro.

  • As coleções de pesquisa vetorial não são compatíveis com as operações de API de aquecimento, estatísticas e treinamento de modelo.

  • As coleções de pesquisa vetorial não oferecem suporte a scripts embutidos ou armazenados.

  • As informações de contagem de índices não estão disponíveis nas coleções Console de gerenciamento da AWS de pesquisa vetorial.

  • O intervalo de atualização dos índices nas coleções de pesquisa vetorial é de 60 segundos.

Billion-scale cargas de trabalho

As coleções clássicas de pesquisa vetorial oferecem suporte a cargas de trabalho com bilhões de vetores. Você não precisa reindexar para fins de escalonamento porque o escalonamento automático faz isso por você. Se você tiver milhões de vetores (ou mais) com um grande número de dimensões e precisar de mais de 200 OCUs, entre em contato com o AWS Support para aumentar o máximo de Unidades de OpenSearch Computação (OCUs) para sua conta.

Próximas etapas

Agora que você sabe como criar uma coleta de pesquisa vetorial e indexar dados, experimente os seguintes exercícios:

  • Use o cliente OpenSearch Python para trabalhar com coleções de pesquisa vetorial. Veja este tutorial em GitHub.

  • Use o cliente OpenSearch Java para trabalhar com coleções de pesquisa vetorial. Veja este tutorial em GitHub.

  • Configure LangChain para usar OpenSearch como um repositório de vetores. LangChain é uma estrutura de código aberto para o desenvolvimento de aplicativos alimentados por modelos de linguagem. Para obter mais informações, consulte a documentação do LangChain .