Lompat ke konten
โ† Semua tulisan

pgvector: Pencarian Semantik Tanpa Menambah Infrastruktur

N Nicholaus Verdhy Putranto 13 Juli 2026 ยท 2 menit baca ยท 9 dilihat

Setiap kali topik pencarian semantik muncul, saran pertama yang keluar selalu: pasang Pinecone, Weaviate, atau Qdrant.

Untuk kebanyakan proyek, itu menambah satu layanan lagi untuk dirawat, dibayar, dan dimonitor โ€” padahal PostgreSQL yang sudah jalan bisa melakukannya.

Memasang

CREATE EXTENSION IF NOT EXISTS vector;

Sebagian besar layanan Postgres terkelola sudah menyediakannya. Untuk server sendiri, satu perintah instalasi paket.

Memakainya dari Django

pip install pgvector django
from django.db import models
from pgvector.django import VectorField, HnswIndex

class Potongan(models.Model):
    dokumen = models.ForeignKey("Dokumen", on_delete=models.CASCADE)
    isi = models.TextField()
    embedding = VectorField(dimensions=1536)

    class Meta:
        indexes = [
            HnswIndex(
                name="potongan_embedding_idx",
                fields=["embedding"],
                m=16,
                ef_construction=64,
                opclasses=["vector_cosine_ops"],
            ),
        ]

Mencari

from pgvector.django import CosineDistance

def cari_mirip(vektor_pertanyaan, jumlah=5):
    return (
        Potongan.objects
        .annotate(jarak=CosineDistance("embedding", vektor_pertanyaan))
        .order_by("jarak")[:jumlah]
    )

Keunggulan yang sering diremehkan

Bisa digabung dengan filter biasa. Ini kelebihan terbesarnya. Kamu bisa mencari berdasarkan makna sekaligus menyaring dengan kolom biasa, dalam satu query.

Potongan.objects
    .filter(dokumen__pemilik=request.user)
    .filter(dokumen__dibuat__gte=bulan_lalu)
    .annotate(jarak=CosineDistance("embedding", vektor))
    .order_by("jarak")[:5]

Di vector database terpisah, hal ini biasanya berarti dua query dan penggabungan manual di sisi aplikasi.

Ikut transaksi database. Kalau penyimpanan gagal, semuanya di-rollback bersama. Tidak ada kondisi di mana dokumen tersimpan tapi embedding-nya hilang.

Ikut backup yang sudah ada. Tidak ada layanan tambahan yang perlu dicadangkan terpisah.

Kapan pgvector tidak cukup

Jujur soal batasannya: kalau kamu punya puluhan juta vektor dan butuh latensi di bawah sepuluh milidetik, vector database khusus memang lebih unggul. Mereka dibangun untuk itu.

Tapi kalau jumlahnya di bawah satu juta โ€” dan itu mencakup hampir semua aplikasi internal, dokumentasi produk, dan basis pengetahuan perusahaan โ€” pgvector cepat dan jauh lebih sederhana.

Saran praktis

Mulai dengan pgvector. Ukur. Pindah kalau memang terbukti tidak cukup. Jangan menambah layanan untuk masalah yang belum kamu miliki.

Bagikan ke WhatsApp Bagikan ke X

Komentar (0)

Belum ada komentar. Jadilah yang pertama!

Tinggalkan Komentar

Komentar akan tampil setelah disetujui.

Baca Juga