Anda dapat mengakses dan menelusuri data yang disimpan di Apache Solr menggunakan integrasi penelusuran eksternal di AlloyDB Omni.
Batasan
Sebelum menghubungkan AlloyDB ke Solr, ketahui batasan berikut:
Integrasi Solr hanya tersedia di PostgreSQL versi utama
17dan yang lebih baru.AlloyDB membaca, tetapi tidak menulis ke, data Solr.
AlloyDB tidak otomatis mengindeks data database Anda ke Solr. Anda bertanggung jawab untuk mengisi koleksi Solr dan mempertahankan konsistensi antara data di AlloyDB dan data terindeks di Solr.
AlloyDB tidak otomatis menyinkronkan skema dengan Solr. Jika skema koleksi Solr Anda berubah, Anda harus memperbarui skema tabel asing PostgreSQL yang sesuai secara manual.
Tidak seperti Elasticsearch, Solr tidak memiliki kolom berjenis JSON yang telah ditentukan. Anda harus memetakan kolom berjenis JSON ke string berformat
TEXTataujsonb.Solr memerlukan kunci unik dalam ekspresi pengurutan agar penomoran halaman berfungsi dengan benar. Secara default, kolom
iddigunakan. Anda dapat menentukan kolom kustom, atau daftar beberapa kolom yang dipisahkan koma beserta urutan pengurutannya masing-masing, misalnya,myid0 ASC, myid1 DESC, menggunakan opsiunique_key_sort_suffixsaat Anda membuat tabel asing.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menyelesaikan hal berikut:
Tambahkan konektivitas IP publik keluar di instance AlloyDB utama Anda.
Deploy dan jalankan cluster Solr Anda dengan URL yang dapat diakses dan menghadap publik.
Simpan kredensial Solr Anda di Secret Manager. Untuk autentikasi Dasar, nilai secret harus berupa string berenkode base64 dalam format
username:password.Pastikan akun layanan yang digunakan oleh AlloyDB memiliki izin
secretmanager.secretAccessoruntuk membaca secret dari Secret Manager.
Mengaktifkan dan mengonfigurasi ekstensi external_search_fdw
Untuk memulai integrasi dengan Solr, konfigurasi akses ke cluster Solr Anda melalui server data asing.
CREATE EXTENSION external_search_fdw;
CREATE SERVER SOLR_SERVER_NAME
FOREIGN DATA WRAPPER external_search_fdw
OPTIONS (
server 'SOLR_SERVER_HOST_PORT',
search_provider 'solr',
auth_mode 'secret_manager',
auth_method 'AUTH_METHOD',
secret_path 'SECRET_PATH'
);
Ganti variabel berikut:
SOLR_SERVER_NAME: nama untuk server data asing Anda. Misalnya,solr.SOLR_SERVER_HOST_PORT: URL yang menghadap publik untuk cluster SOLR Anda. Misalnya,https://node1.solr.test.com:8983.AUTH_METHOD: jenis autentikasi yang akan digunakan. Misalnya,Basic.SECRET_PATH: jalur Secret Manager ke kredensial autentikasi Solr Anda. Misalnya,projects/123456789012/secrets/apikey/versions/1.123456789012mewakili ID projectAnda. Google Cloud
Tentukan pemetaan pengguna PostgreSQL untuk server Solr. Perhatikan bahwa FDW PostgreSQL memerlukan pemetaan pengguna ini agar berfungsi. AlloyDB melakukan autentikasi menggunakan header otorisasi REST.
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;Petakan skema koleksi Solr Anda ke tabel asing PostgreSQL.
CREATE FOREIGN TABLE SOLR_FD_TABLE( metadata external_search_fdw_schema.OpaqueMetadata, SOLR_FIELDS) SERVER SOLR_SERVER_NAME OPTIONS( remote_table_name 'SOLR_COLLECTION_NAME' unique_key_sort_suffix 'UNIQUE_KEY_SORT_SUFFIX' );Ganti variabel baru berikut:
SOLR_FD_TABLE: nama tabel data asing yang mewakili tabel Solr Anda. Misalnya,my-fd-solr-table.SOLR_FIELDS: daftar yang dipisahkan koma dengan setiap entri mengikuti formatsolr_field_name PG_DATA_TYPE. Untuk mengetahui daftar jenis data Solr yang didukung dan jenis PostgreSQL yang sesuai, lihat Jenis data yang didukung.UNIQUE_KEY_SORT_SUFFIX: (Opsional) kolom kunci unik di Solr, atau daftar beberapa kolom yang dipisahkan koma dengan urutan pengurutannya, misalnya,myid0 ASC, myid1 DESC, yang digunakan untuk penomoran halaman. Setelan defaultnya adalahid.PG_DATA_TYPE: jenis PostgreSQL yang ingin Anda petakan. Contoh umumnya mencakup:TEXTuntuk data string.INTEGERuntuk data numerik.
SOLR_COLLECTION_NAME: nama koleksi Solr Anda. Misalnya,my-solr-collection.
Membuat kueri data Solr
AlloyDB mengambil kueri SQL dan mengonversinya menjadi kueri Solr REST API.
Untuk membuat kueri data Solr, Anda memiliki opsi berikut:
- Kueri SQL standar
- DSL kueri
- Penelusuran campuran
Kueri SQL standar
Anda dapat menggunakan SQL standar dengan sintaksis Lucene untuk ekspresi penelusuran.
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Ganti variabel berikut:
SOLR_FD_TABLE: nama tabel data asing yang mewakili tabel Solr Anda. Misalnya,my-fd-solr-table.(Opsional)
FILTER: filter yang akan diterapkan ke kueri Solr Anda. Misalnya,AND qubits < 105.QUERY: kueri yang akan dikirim ke Solr. Misalnya,body:database.
DSL kueri
Untuk kasus penggunaan lanjutan, gunakan DSL Kueri gaya JSON Solr .
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
Ganti SOLR_FD_TABLE dengan
nama tabel data asing yang mewakili tabel Solr Anda. Misalnya, my-fd-solr-table.
Penelusuran campuran
SELECT *
FROM ai.hybrid_search(
ARRAY[
'{"limit": LIMIT,
"weight": WEIGHT,
"table_name": "SOLR_FD_TABLE",
"key_column": "id",
"query_text_input": "QUERY"}'::jsonb
])
ORDER BY score DESC;
Ganti variabel berikut:
LIMIT: jumlah hasil yang akan ditampilkan. Misalnya,10.WEIGHT: kontribusi entri penelusuran ini ke Reciprocal Rank Fusion (RRF) keseluruhan. Misalnya,0.5.SOLR_FD_TABLE: nama tabel data asing yang mewakili tabel Solr Anda. Misalnya,my-fd-solr-table.QUERY: kueri yang akan dikirim ke Solr. Misalnya,"solr_field_name:\"cloud databases\""menelusuri frasa "cloud databases" di kolomsolr_field_name.