Objetivos
- Instale o AlloyDB AI no AlloyDB Omni.
- Associe à sua base de dados e instale as extensões necessárias.
- Crie uma tabela
producteproduct inventory. - Inserir dados nas tabelas
producteproduct inventorye fazer uma pesquisa vetorial básica. - Crie um índice ScaNN na tabela de produtos.
- Fazer uma pesquisa vetorial.
- Realize uma pesquisa vetorial complexa com um filtro e uma junção.
Custos
Neste documento, usa o seguinte componente faturável de Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Pré-requisitos
Conclua os seguintes pré-requisitos antes de realizar uma pesquisa vetorial.
Instale o AlloyDB AI no AlloyDB Omni com base no seu ambiente de computação
Com base no ambiente de computação que está a usar, conclua as instruções em Instale o AlloyDB AI no AlloyDB Omni para instalar o AlloyDB Omni.
Associe à sua base de dados através do psql
Associe à sua base de dados através do psql:
export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=my-db-cluster,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`kubectl exec -ti $DBPOD -c database -- psql -h localhost -U postgres
Instale as extensões necessárias
Execute a seguinte consulta para instalar as extensões vector, alloydb_scann e google_ml_integration:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte Limpe.
Insira dados de produtos e de inventário de produtos e faça uma pesquisa vetorial básica
As tabelas product_inventory e product são usadas neste tutorial para executar consultas de pesquisa vetorial complexas.
Execute a seguinte declaração para criar uma tabela
productque faça o seguinte:- Armazena informações básicas sobre o produto.
- Inclui uma coluna de vetor
embeddingque calcula e armazena um vetor de incorporação para uma descrição do produto de cada produto.
CREATE TABLE product ( id INT PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, category VARCHAR(255), color VARCHAR(255), embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-004', description)) STORED );Execute a seguinte consulta para criar uma tabela
product_inventoryque armazene informações sobre o inventário disponível e os preços correspondentes.CREATE TABLE product_inventory ( id INT PRIMARY KEY, product_id INT REFERENCES product(id), inventory INT, price DECIMAL(10,2) );Execute a seguinte consulta para inserir dados de produtos na tabela
product:INSERT INTO product (id, name, description,category, color) VALUES (1, 'Stuffed Elephant', 'Soft plush elephant with floppy ears.', 'Plush Toys', 'Gray'), (2, 'Remote Control Airplane', 'Easy-to-fly remote control airplane.', 'Vehicles', 'Red'), (3, 'Wooden Train Set', 'Classic wooden train set with tracks and trains.', 'Vehicles', 'Multicolor'), (4, 'Kids Tool Set', 'Toy tool set with realistic tools.', 'Pretend Play', 'Multicolor'), (5, 'Play Food Set', 'Set of realistic play food items.', 'Pretend Play', 'Multicolor'), (6, 'Magnetic Tiles', 'Set of colorful magnetic tiles for building.', 'Construction Toys', 'Multicolor'), (7, 'Kids Microscope', 'Microscope for kids with different magnification levels.', 'Educational Toys', 'White'), (8, 'Telescope for Kids', 'Telescope designed for kids to explore the night sky.', 'Educational Toys', 'Blue'), (9, 'Coding Robot', 'Robot that teaches kids basic coding concepts.', 'Educational Toys', 'White'), (10, 'Kids Camera', 'Durable camera for kids to take pictures and videos.', 'Electronics', 'Pink'), (11, 'Walkie Talkies', 'Set of walkie talkies for kids to communicate.', 'Electronics', 'Blue'), (12, 'Karaoke Machine', 'Karaoke machine with built-in microphone and speaker.', 'Electronics', 'Black'), (13, 'Kids Drum Set', 'Drum set designed for kids with adjustable height.', 'Musical Instruments', 'Blue'), (14, 'Kids Guitar', 'Acoustic guitar for kids with nylon strings.', 'Musical Instruments', 'Brown'), (15, 'Kids Keyboard', 'Electronic keyboard with different instrument sounds.', 'Musical Instruments', 'Black'), (16, 'Art Easel', 'Double-sided art easel with chalkboard and whiteboard.', 'Arts & Crafts', 'White'), (17, 'Finger Paints', 'Set of non-toxic finger paints for kids.', 'Arts & Crafts', 'Multicolor'), (18, 'Modeling Clay', 'Set of colorful modeling clay.', 'Arts & Crafts', 'Multicolor'), (19, 'Watercolor Paint Set', 'Watercolor paint set with brushes and palette.', 'Arts & Crafts', 'Multicolor'), (20, 'Beading Kit', 'Kit for making bracelets and necklaces with beads.', 'Arts & Crafts', 'Multicolor'), (21, '3D Puzzle', '3D puzzle of a famous landmark.', 'Puzzles', 'Multicolor'), (22, 'Race Car Track Set', 'Race car track set with cars and accessories.', 'Vehicles', 'Multicolor'), (23, 'RC Monster Truck', 'Remote control monster truck with oversized tires.', 'Vehicles', 'Green'), (24, 'Train Track Expansion Set', 'Expansion set for wooden train tracks.', 'Vehicles', 'Multicolor');Opcional: para verificar se os dados são inseridos na tabela
product, execute a seguinte consulta:SELECT * FROM product;Execute a seguinte consulta para inserir dados de inventário na tabela
product_inventory:INSERT INTO product_inventory (id, product_id, inventory, price) VALUES (1, 1, 9, 13.09), (2, 2, 40, 79.82), (3, 3, 34, 52.49), (4, 4, 9, 12.03), (5, 5, 36, 71.29), (6, 6, 10, 51.49), (7, 7, 7, 37.35), (8, 8, 6, 10.87), (9, 9, 7, 42.47), (10, 10, 3, 24.35), (11, 11, 4, 10.20), (12, 12, 47, 74.57), (13, 13, 5, 28.54), (14, 14, 11, 25.58), (15, 15, 21, 69.84), (16, 16, 6, 47.73), (17, 17, 26, 81.00), (18, 18, 11, 91.60), (19, 19, 8, 78.53), (20, 20, 43, 84.33), (21, 21, 46, 90.01), (22, 22, 6, 49.82), (23, 23, 37, 50.20), (24, 24, 27, 99.27);Execute a seguinte consulta de pesquisa vetorial para pesquisar produtos semelhantes à palavra
music. Embora a palavramusicnão seja mencionada explicitamente na descrição do produto, o resultado mostra produtos relevantes para a consulta:SELECT * FROM product ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector LIMIT 3;Se realizar uma pesquisa vetorial básica sem criar um índice, a IA do AlloyDB usa o KNN, que oferece uma capacidade de memorização eficiente. No entanto, em grande escala, a utilização do KNN pode afetar o desempenho. Para um melhor desempenho das consultas, recomendamos que use o índice ScaNN para a pesquisa ANN, que oferece uma elevada capacidade de memorização com baixas latências.
Se não criar um índice, o AlloyDB Omni usa o KNN por predefinição.
Crie um índice ScaNN na tabela de produtos
Execute a seguinte consulta para criar um índice product_indexScaNN na tabela product:
CREATE INDEX product_index ON product
USING scann (embedding cosine)
WITH (num_leaves=5);
O parâmetro num_leaves indica o número de nós folha com os quais o índice baseado em árvore cria o índice. Para mais informações sobre como ajustar este parâmetro, consulte o artigo Ajuste o desempenho das consultas vetoriais.
Fazer uma pesquisa vetorial
Execute a seguinte consulta de pesquisa vetorial que tenta encontrar produtos semelhantes à consulta de linguagem natural music. Embora a palavra music não esteja incluída na descrição do produto, o resultado mostra produtos relevantes para a consulta:
SET LOCAL scann.num_leaves_to_search = 2;
SELECT * FROM product
ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector
LIMIT 3;
O parâmetro de consulta scann.num_leaves_to_search controla o número de nós folha que são pesquisados durante uma pesquisa de semelhança. Os valores dos parâmetros num_leaves e scann.num_leaves_to_search ajudam a equilibrar o desempenho das consultas e a capacidade de memorização.
Realize uma pesquisa vetorial que use um filtro e uma junção
Execute a seguinte consulta de pesquisa vetorial complexa, que devolve resultados relevantes que satisfazem as condições da consulta, mesmo com filtros:
SET LOCAL scann.num_leaves_to_search = 2;
SELECT * FROM product p
JOIN product_inventory pi ON p.id = pi.product_id
WHERE pi.price < 80.00
ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector
LIMIT 3;
Limpar
Elimine o cluster da base de dados
kubectl patch dbclusters.alloydbomni.dbadmin.goog my-db-cluster -p '{"spec":{"isDeleted":true}}' --type=mergeDesinstale o operador do AlloyDB Omni
Para desinstalar o operador do AlloyDB Omni Kubernetes do cluster do Kubernetes, conclua estes passos:
Elimine todos os clusters de base de dados:
for ns in $(kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespaces -o=jsonpath='{range .items[*]}{.metadata.namespace}{"\n"}{end}'); do for cr in $(kubectl get dbclusters.alloydbomni.dbadmin.goog -n $ns -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'); do kubectl patch dbclusters.alloydbomni.dbadmin.goog $cr -n $ns --type=merge -p '{"spec":{"isDeleted":true}}' done done ```Verifique se o operador do Kubernetes do AlloyDB Omni eliminou todos os clusters de base de dados executando o seguinte comando:
kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespacesElimine outros recursos que o operador do Kubernetes do AlloyDB Omni criou:
kubectl delete failovers.alloydbomni.dbadmin.goog --all --all-namespaceskubectl delete restores.alloydbomni.dbadmin.goog --all --all-namespaceskubectl delete switchovers.alloydbomni.dbadmin.goog --all --all-namespacesDesinstale o operador do Kubernetes do AlloyDB Omni:
helm uninstall alloydbomni-operator --namespace alloydb-omni-systemLimpe os segredos, as descrições de recursos personalizados e os espaços de nomes relacionados com o operador do Kubernetes do AlloyDB Omni:
kubectl delete certificate -n alloydb-omni-system --allkubectl get secrets --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,ANNOTATION:.metadata.annotations.cert-manager\.io/issuer-name | grep -E 'alloydbomni|dbs-al' | awk '{print $1 " " $2}' | xargs -n 2 kubectl delete secret -nkubectl delete crd -l alloydb-omni=truekubectl delete ns alloydb-omni-system