Anda dapat mengakses dan menelusuri data yang disimpan di Apache Solr menggunakan integrasi penelusuran eksternal di AlloyDB untuk PostgreSQL.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menyelesaikan hal berikut:
Menambahkan konektivitas IP publik keluar di instance AlloyDB utama Anda.
Men-deploy dan menjalankan cluster Solr Anda dengan URL publik yang dapat diakses.
Menyimpan kredensial Solr di Secret Manager
AlloyDB menyimpan dan membaca kredensial Solr Anda dari Secret Manager. Untuk autentikasi Dasar, nilai secret di Secret Manager harus berupa string berenkode base64 dalam format username:password. Untuk mengetahui informasi selengkapnya tentang cara menggunakan
Secret Manager, lihat
Membuat dan mengakses secret menggunakan Secret Manager.
Pastikan akun layanan AlloyDB Anda memiliki peran Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) untuk membaca secret dari Secret Manager. Untuk mengetahui informasi selengkapnya, lihat
Membuat dan mengakses secret menggunakan Secret Manager.
Mengaktifkan dan mengonfigurasi ekstensi external_search_fdw
Untuk memulai integrasi dengan Solr, konfigurasikan 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 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 project ID Anda. 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 yang dipisahkan koma dari beberapa kolom 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.
Pemecahan masalah
Jika Anda mengalami masalah autentikasi atau konektivitas saat membuat kueri cluster Solr, periksa penyebab umum berikut:
- Error autentikasi HTTP 401 atau 403: Pastikan secret Solr Anda di Secret Manager berisi string berenkode base64 dalam format
username:passworddan akun layanan yang digunakan oleh AlloyDB memiliki izinsecretmanager.secretAccessor. - Waktu koneksi habis: Pastikan konektivitas IP publik keluar diaktifkan di instance AlloyDB utama Anda dan firewall Solr Anda mengizinkan koneksi masuk di port yang ditentukan.
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 yang dipisahkan koma dari beberapa kolom beserta urutan pengurutannya masing-masing, misalnya,myid0 ASC, myid1 DESC, menggunakan opsiunique_key_sort_suffixsaat Anda membuat tabel asing.
Langkah berikutnya
- Pelajari cara Mengakses data OpenSearch.
- Pelajari cara Mengakses data Elasticsearch.
- Pelajari cara Menjalankan penelusuran kemiripan vektor campuran.