Mengakses data Solr dari AlloyDB untuk PostgreSQL

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:

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. 123456789012 mewakili project ID Anda. Google Cloud

  1. 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;
    
  2. 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 format solr_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 adalah id.

    • PG_DATA_TYPE: jenis PostgreSQL yang ingin Anda petakan. Contoh umumnya mencakup:

      • TEXT untuk data string.
      • INTEGER untuk 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.

Untuk melakukan penelusuran campuran pada data Solr Anda, gabungkan hasil penelusuran token Solr dengan hasil penelusuran vektor AlloyDB.

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 kolom solr_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:password dan akun layanan yang digunakan oleh AlloyDB memiliki izin secretmanager.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 17 dan 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 TEXT atau jsonb.

  • Solr memerlukan kunci unik dalam ekspresi pengurutan agar penomoran halaman berfungsi dengan benar. Secara default, kolom id digunakan. Anda dapat menentukan kolom kustom, atau daftar yang dipisahkan koma dari beberapa kolom beserta urutan pengurutannya masing-masing, misalnya, myid0 ASC, myid1 DESC, menggunakan opsi unique_key_sort_suffix saat Anda membuat tabel asing.

Langkah berikutnya