Lakebase Araması

Important

Bu özellik Beta sürümündedir. Çalışma alanı yöneticileri Bu özelliğe erişimi Önizlemeler sayfasından denetleyebilir. Bkz. Azure Databricks önizlemelerini yönetme.

Lakebase Search, Lakebase Otomatik Ölçeklendirme projelerine karma vektör ve anahtar sözcük araması ekler. Proje ayarlarınızda bir kez etkinleştirin, ardından ve Postgres uzantılarını yükleyip lakebase_vectorlakebase_text arama özellikleri oluşturmaya başlayın.

Lakebase Search iki tamamlayıcı arama yöntemi sağlar. Kendi başına kullanın veya karma arama için bunları birleştirin:

  • Vektör (anlamsal) arama , sözcükleri paylaşmasalar bile anlamı sorgunuza en yakın olan satırları bulur. Ekleme (model tarafından üretilen sayısal bir vektör) ile sorgularsınız ve dizin mesafeye göre en yakın vektörleri döndürür. Doğal dilde sorular, öneriler ve erişimle zenginleştirilmiş üretim (RAG) için kullanın. lakebase_vector tarafından desteklenmektedir.
  • Anahtar sözcük (tam metin) araması , BM25 ilgi puanlaması kullanarak satırları sorgunuzdaki terimlerle tam olarak ne kadar eşleştiğini göre sıralar. Bunu, ifade biçiminin önemli olduğu ad, kod ve tam terim aramaları için kullanın. lakebase_text tarafından desteklenmektedir.
  • Karma arama hem aramaları çalıştırır hem de sonuçları tek bir dereceli listede birleştirir, böylece benzer ve tam terim eşleşmelerini bir arada elde edersiniz. Sorgular amacı belirli terimlerle karıştırdığında (gerçek dünyada aramada en yaygın durum) kullanın.

Nasıl çalışır?

Arka planda Lakebase Search iki Postgres uzantısı üzerine kurulmuştur:

  • lakebase_vector, lakebase_ann dizin türü aracılığıyla yaklaşık en yakın komşu (ANN) vektör araması sağlar. pgvector için doğrudan kullanılabilen bir yardımcıdır: aynı vektör türleri, uzaklık işleçleri ve sorgu söz dizimi herhangi bir değişiklik gerektirmeden çalışır. Dahili olarak, RaBitQ nicemlemesiyle IVF bölümlendirmesi kullanır; bu sayede tek bir indeks üzerinde 1 milyarı aşkın vektör desteklenir ve indeksler HNSW'ye kıyasla 50-100 kat daha hızlı oluşturulabilir. Dizinler depolama desteklidir ve ısınma olmadan sıfıra ölçeklendirilebilir .

  • lakebase_text dizin türü aracılığıyla lakebase_bm25 BM25 tam metin araması ekler. PostgreSQL'in standart tsvector türleri ve sorgu işleçleriyle uyumludur. BM25 derecelendirmesi terim sıklığı, belge uzunluğu ve korpus genelindeki istatistikleri aynı anda hesaplar. Top-K pushdown (Block-Max WAND), her eşleşmeyi puanlamak yerine dizinden yalnızca en ilgili K sonucu getirir.

Arama hizmetini göl evinden gelen veriler üzerinden sunabilirsiniz, sadece doğrudan Postgres'e yazılan veri değil. Senkronize tablolar kullanarak bir Unity Kataloğu tablosunu Lakebase'e senkronize edin ve senkronizasyon sırasında sütunlarını arama hazır Postgres tiplerine eşleyin:

Senkronizasyon tamamlandıktan sonra, senkronize edilen sütunda bir lakebase_ann veya lakebase_bm25 indeks oluşturun ve uygulamalarınıza operasyonel verilerinizle birlikte düşük gecikmeli arama hizmeti sunun. Haritalama yapılandırması için Lakebase Search için Özel tip eşleme'ye bakınız.

Requirements

  • Postgres 16 veya üzeri
  • Projeniz için beta erişim. Lakebase Search beta sürümündedir; talep etmek için Databricks hesap temsilcinize başvurun.
  • Projede Lakebase Araması'nın etkinleştirilmesi geri alınamaz

Projenize erişim sağlandıktan sonra proje ayarlarınızda Lakebase Arama'yı etkinleştirin:

  1. Lakebase projenizde sol gezinti bölmesinde Ayarlar'a tıklayın.
  2. Lakebase Araması'nın altında Lakebase Aramasını Etkinleştir'e tıklayın.

Warning

Lakebase Aramasını Etkinleştirme:

  • Projenizdeki tüm hesaplama örneklerini yeniden başlatır ve etkin bağlantıları keser
  • lakebase_vector ve lakebase_text uzantılarını yüklemek için kullanılabilir hale getirir
  • Etkinleştirildikten sonra kapatılamaz

Uzantıları yükleme

Lakebase Search'ü etkinleştirdikten sonra uzantıları veritabanınıza yükleyin:

-- Required: vector search (CASCADE installs pgvector as a dependency)
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

-- Required: BM25 full-text search
CREATE EXTENSION IF NOT EXISTS lakebase_text;

Başlayın

Aşağıdaki örnek hem vektör sütunu hem de tam metin arama sütunu içeren bir tablo oluşturur documents ve ardından vektör ve anahtar sözcük sorgularını çalıştırır:

Note

Bu örneklerde, açıklama amacıyla '[0.1, 0.2, 0.3]' gibi küçük sabit vektörler kullanılır. Gerçek bir uygulamada, ekleme modeliyle harici olarak eklemeler oluşturun ve ardından sonucu sütunda depolayın VECTOR . Databricks'te, model sunumunu kullanarak (örneğin, bir not defterinde veya Databricks SQL'de) ekleme ai_query ve ardından elde edilen vektörleri Lakebase'e ekleyebilirsiniz. Sütun VECTOR(n) ve dizin, modelinizin çıkışıyla aynı boyutu n kullanmalıdır (genellikle 384 ile 1536 arasında).

-- Create a table with a vector column and a tsvector column
CREATE TABLE documents (
  id        SERIAL PRIMARY KEY,
  title     TEXT NOT NULL,
  body      TEXT NOT NULL,
  embedding VECTOR(3),
  body_tsv  TSVECTOR
);

-- Create a vector search index
CREATE INDEX ON documents USING lakebase_ann (embedding vector_cosine_ops);

-- Insert sample data and populate the tsvector column
INSERT INTO documents (title, body, embedding, body_tsv) VALUES
  ('Postgres overview', 'Postgres is an open-source relational database.', '[0.1, 0.2, 0.3]', to_tsvector('english', 'Postgres is an open-source relational database.')),
  ('Vector search guide', 'Vector search finds semantically similar results.', '[0.4, 0.5, 0.6]', to_tsvector('english', 'Vector search finds semantically similar results.')),
  ('Full-text search', 'BM25 ranking improves keyword search relevance.', '[0.7, 0.8, 0.9]', to_tsvector('english', 'BM25 ranking improves keyword search relevance.'));

-- Build the BM25 index after inserting data
-- BM25 computes corpus statistics at build time, not incrementally
CREATE INDEX documents_body_bm25 ON documents USING lakebase_bm25 (body_tsv);

-- Vector similarity search
SELECT id, title
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, 0.3]'
LIMIT 5;

-- BM25 keyword search (lower score = more relevant)
SELECT id, title,
  body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;

Aşağıdaki karma arama örneği, documents bölümündeki tabloyu ve dizinleri yeniden kullanır. Her aramadan en iyi adayları bağımsız olarak alır, ardından Reciprocal Rank Fusion (RRF) kullanarak bunları tek bir derecelendirmede birleştirir: aramalardan birinde veya her ikisinde de iyi dereceye sahip sonuçlar daha yüksek puan alır.

WITH vector_ranked AS (
  SELECT id, RANK() OVER (ORDER BY dist) AS rank
  FROM (
    SELECT id, embedding <=> '[0.1, 0.2, 0.3]' AS dist
    FROM documents
    ORDER BY dist
    LIMIT 40
  ) v
),
keyword_ranked AS (
  SELECT id, RANK() OVER (ORDER BY score) AS rank
  FROM (
    SELECT id, body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
    FROM documents
    ORDER BY score
    LIMIT 40
  ) k
)
SELECT d.id, d.title,
  COALESCE(1.0 / (60 + v.rank), 0) + COALESCE(1.0 / (60 + k.rank), 0) AS rrf_score
FROM documents d
LEFT JOIN vector_ranked v ON d.id = v.id
LEFT JOIN keyword_ranked k ON d.id = k.id
WHERE v.id IS NOT NULL OR k.id IS NOT NULL
ORDER BY rrf_score DESC, d.id
LIMIT 10;

Her CTE kendi ilk 40 adayını alır. RANK() eşit puanlara aynı sırayı verir. Sabit 60 , düşük dereceli sonuçların etkisini sönümler ve d.id kararlı sayfalandırma için bağları keser. Verilerinize göre liste başına LIMIT değerini ve RRF sabitini ayarlayın. Ağırlıklı puanlama gibi diğer füzyon yöntemleri de geçerlidir.

Uzantılar

Extension Purpose Dizin türü
lakebase_vector ANN vektör araması, pgvector uyumlu lakebase_ann
lakebase_text BM25 tam metin arama, FTS uyumlu lakebase_bm25