Xây dựng công cụ Tìm kiếm Vector Search nội bộ với PostgreSQL pgvector & OpenAI Embeddings cho E-commerce

2026-07-30 18 phút đọc 0 lượt xemBởi Uwmee Software

Trên các trang web thương mại điện tử lớn sở hữu hàng trăm ngàn sản phẩm, thanh tìm kiếm nội bộ (Internal Site Search Bar) là một trong những điểm chạm mang lại tỷ lệ chuyển đổi đơn hàng cao nhất. Khách hàng sử dụng ô tìm kiếm có khả năng mua hàng cao gấp 3 đến 5 lần so với người chỉ lướt danh mục thông thường.

Tuy nhiên, các thanh tìm kiếm SQL truyền thống (dùng câu lệnh LIKE %keyword% hoặc Full-text Search cơ bản) thường thất bại thảm hại khi khách hàng gõ từ khóa sai chính tả, dùng từ đồng nghĩa hoặc gõ câu hỏi tìm kiếm theo ngữ cảnh tự nhiên (Ví dụ: Khách gõ "áo sơ mi nam mặc đi cưới mùa hè mát mẻ" nhưng DB trả về 0 kết quả!).

Giải pháp đỉnh cao của thế giới công nghệ E-commerce hiện nay chính là Xây dựng công cụ Tìm kiếm Vector Search nội bộ với extension pgvector trong PostgreSQL và OpenAI Embeddings. Kỹ thuật này giúp thấu hiểu 100% ngữ cảnh tìm kiếm và nâng cao chỉ số SXO vượt trội. Bài viết này sẽ hướng dẫn bạn lập trình từ A-Z.

1. Tại sao E-commerce hiện đại bắt buộc phải chuyển sang Vector Search?

Vector Search không so sánh từng ký tự từ khóa (String Matching), mà chuyển đổi cả tên sản phẩm lẫn câu hỏi tìm kiếm của khách hàng thành các chuỗi số tọa độ đa chiều (Vector Embeddings - 1536 chiều với OpenAI text-embedding-3-small).

Tình huống tìm kiếm của khách Tìm kiếm SQL Truyền thống (LIKE / ILIKE) Vector Search (PostgreSQL pgvector)
Gõ từ đồng nghĩa: "điện thoại di động" Không trả về sản phẩm nào nếu sản phẩm chỉ đặt tên là "Smartphone" hoặc "iPhone". Trả về đầy đủ các mẫu iPhone, Samsung vì tọa độ Vector của "điện thoại""smartphone" nằm sát nhau! Read Semantic Search & Vector Search là gì.
Gõ sai chính tả: "dày thề thao" Trả về mã lỗi 404 Không tìm thấy kết quả. Gây thất thoát đơn hàng trầm trọng! Tự động nhận diện ý định mua "giày thể thao" và hiển thị danh sách sản phẩm chuẩn xác.
Gõ ngữ cảnh nhu cầu: "đồ đi biển nam" Chịu thua vì không sản phẩm nào tên là "đồ đi biển". Tự động gom nhóm các sản phẩm: Quần đùi hoa, Áo may ba, Kính râm và Kem chống nắng! View SXO Tối ưu hóa trải nghiệm tìm kiếm.

2. Kiến trúc Hạ tầng Vector Search với PostgreSQL & pgvector

Sơ đồ luồng xử lý truy vấn Vector Search:

Tên/Mô tả Sản phẩm ➔ OpenAI Embedding API (text-embedding-3-small) ➔ Lưu Vector (1536 dims) vào PostgreSQL (pgvector) ➔ Khách tìm kiếm ➔ Chuyển Query thành Vector ➔ Truy vấn Cosine Distance (<=>) trong PostgreSQL ➔ Trả về Top 10 Sản phẩm sát ý định nhất (0ms)

3. Lập trình Chi tiết từng Bước với PostgreSQL & Next.js 15

Bước 1: Kích hoạt extension pgvector trong PostgreSQL

Kết nối tới cơ sở dữ liệu PostgreSQL và chạy câu lệnh kích hoạt extension:

-- Kích hoạt extension pgvector
CREATE EXTENSION IF NOT EXISTS vector;

-- Tạo bảng sản phẩm chứa cột embedding 1536 chiều
CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  slug VARCHAR(255) UNIQUE NOT NULL,
  description TEXT,
  price NUMERIC(10, 2),
  category VARCHAR(100),
  embedding vector(1536) -- Cột lưu tọa độ Vector Embeddings
);

-- Tạo Index HNSW (Hierarchical Navigable Small World) giúp truy vấn Vector siêu tốc
CREATE INDEX ON products USING hnsw (embedding vector_cosine_ops);

Bước 2: Viết Script sinh Vector Embeddings và Lưu vào Database

Tạo file scripts/generate-embeddings.js sử dụng SDK OpenAI chính thức:

import { OpenAI } from 'openai';
import { db } from '@/lib/db'; // Kết nối PostgreSQL qua Drizzle hoặc pg-pool

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

export async function updateProductEmbedding(productId, title, description) {
  // Tạo chuỗi văn bản tổng hợp thông tin sản phẩm
  const textToEmbed = 'Sản phẩm: ' + title + '. Mô tả: ' + description;

  // Gọi API OpenAI sinh Vector 1536 chiều
  const response = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: textToEmbed,
  });

  const embeddingVector = response.data[0].embedding;

  // Cập nhật Vector vào cột embedding của bảng products trong PostgreSQL
  await db.query(
    'UPDATE products SET embedding = $1 WHERE id = $2',
    [JSON.stringify(embeddingVector), productId]
  );
}

Read bài hướng dẫn SEO Kỹ thuật cho Headless E-commerce.

Bước 3: Lập trình Route Handler Tìm kiếm Vector Search siêu tốc

Tạo file API Endpoint app/api/search/route.js trong Next.js App Router:

import { NextResponse } from 'next/server';
import { OpenAI } from 'openai';
import { db } from '@/lib/db';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

export async function GET(request) {
  const { searchParams } = new URL(request.url);
  const query = searchParams.get('q');

  if (!query) {
    return NextResponse.json({ products: [] });
  }

  // 1. Chuyển truy vấn tìm kiếm của người dùng thành Vector
  const embeddingRes = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: query,
  });
  const queryVector = JSON.stringify(embeddingRes.data[0].embedding);

  // 2. Truy vấn Cosine Distance (<=>) trong PostgreSQL sắp xếp độ tương đồng
  const { rows } = await db.query(
    'SELECT id, title, slug, price, description, (embedding <=> $1) AS distance FROM products ORDER BY distance ASC LIMIT 12;',
    [queryVector]
  );

  return NextResponse.json({ products: rows });
}

View bài viết Xây dựng hệ thống đo Cosine Similarity.

4. Đo lường Hiệu quả SXO và Tỷ lệ Chuyển đổi Đơn hàng

  • Giảm tỷ lệ thoát trang tìm kiếm (Zero Search Results Rate): Theo dõi chỉ số tìm kiếm rỗng trong Google Analytics 4. Việc áp dụng Vector Search giúp giảm số lượt tìm kiếm rỗng về 0%!
  • Tăng chỉ số giữ chân người dùng (Dwell Time): Khách hàng dễ dàng tìm thấy chính xác sản phẩm họ cần dù chỉ nhớ lờ mờ công dụng, giúp tăng tỷ lệ chốt đơn (CVR) lên đến 35%. Read SXO Tối ưu trải nghiệm tìm kiếm.
  • Tối ưu hóa các trang kết quả tìm kiếm nội bộ cho SEO: Cho phép Googlebot cào và index các trang kết quả tìm kiếm chất lượng cao có thẻ Canonical tự trỏ sạch. Read Xử lý Canonical Tag cho URL tham số.

Kết luận

Tích hợp công cụ Vector Search nội bộ với PostgreSQL pgvector là bước nhảy vọt về mặt công nghệ giúp các website bán hàng E-commerce nâng cấp toàn diện trải nghiệm tìm kiếm (SXO). Việc thấu hiểu đúng ý định mua sắm của khách hàng sẽ mang lại sự bứt phá doanh số vượt trội cho doanh nghiệp.

Câu hỏi thường gặp

Bạn cần giải pháp phần mềm chuyên nghiệp?

Uwmee Software cung cấp dịch vụ 12 tester Google Play & thiết kế website cao cấp giúp nâng tầm thương hiệu của bạn.