Mengakses data OpenSearch dari AlloyDB Omni

Pilih versi dokumentasi:

Anda dapat mengakses dan menelusuri data yang disimpan di OpenSearch menggunakan integrasi penelusuran eksternal di AlloyDB Omni. Integrasi ini memungkinkan Anda melakukan penelusuran gabungan di seluruh indeks OpenSearch yang ada dan tabel relasional Anda tanpa menyalin atau memindahkan data.

Sebelum memulai

Sebelum Anda memulai, selesaikan hal-hal berikut:

Menyimpan kredensial OpenSearch di Secret Manager

AlloyDB Omni menyimpan dan membaca kredensial OpenSearch Anda dari Secret Manager. Untuk autentikasi HTTP Dasar, nilai secret di Secret Manager harus berupa string yang diformat sebagai username:password. Untuk mengetahui informasi selengkapnya tentang cara menggunakan Secret Manager, lihat Membuat dan mengakses secret menggunakan Secret Manager.

Pastikan akun layanan yang digunakan AlloyDB Omni memiliki izin secretmanager.secretAccessor untuk membaca secret dari Secret Manager. Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke secret.

Mengaktifkan dan mengonfigurasi ekstensi external_search_fdw

Untuk memulai integrasi dengan OpenSearch, konfigurasi akses ke cluster OpenSearch Anda melalui server data eksternal.

  1. Hubungkan ke database Anda dan aktifkan ekstensi:

    CREATE EXTENSION external_search_fdw;
    
  2. Buat server asing:

    CREATE SERVER OPENSEARCH_SERVER_NAME
    FOREIGN DATA WRAPPER external_search_fdw
    OPTIONS (
      server 'OPENSEARCH_SERVER_HOST_PORT',
      search_provider 'opensearch',
      auth_mode 'secret_manager',
      auth_method 'AUTH_METHOD',
      secret_path 'SECRET_PATH'
    );
    

    Ganti variabel berikut:

    • OPENSEARCH_SERVER_NAME: nama untuk server data asing Anda. Contoh, opensearch.

    • OPENSEARCH_SERVER_HOST_PORT: URL yang menghadap publik untuk cluster OpenSearch Anda. Contoh, https://search-my-domain.us-east-1.es.amazonaws.com:443.

    • AUTH_METHOD: jenis autentikasi yang akan digunakan. Contoh, Basic.

    • SECRET_PATH: Jalur Secret Manager ke kredensial autentikasi OpenSearch Anda. Contoh, projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.

  3. Tentukan pemetaan pengguna untuk server OpenSearch:

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. Petakan skema indeks OpenSearch Anda ke tabel asing PostgreSQL:

    CREATE FOREIGN TABLE OPENSEARCH_FD_TABLE(
        metadata external_search_fdw_schema.OpaqueMetadata,
        OPENSEARCH_FIELDS)
           SERVER OPENSEARCH_SERVER_NAME
           OPTIONS(
                remote_table_name 'OPENSEARCH_INDEX_NAME'
           );
    

    Ganti variabel berikut:

    • OPENSEARCH_FD_TABLE: nama tabel data asing yang merepresentasikan tabel OpenSearch Anda. Contoh, my-fd-opensearch-table.

    • OPENSEARCH_FIELDS: daftar yang dipisahkan koma dengan setiap entri mengikuti format opensearch_field_name PG_DATA_TYPE. Untuk mengetahui daftar jenis data OpenSearch yang didukung dan jenis PostgreSQL yang sesuai, lihat Jenis data yang didukung.

    • OPENSEARCH_INDEX_NAME: nama indeks OpenSearch Anda. Contoh, my-opensearch-index.

Membuat kueri data OpenSearch

AlloyDB Omni mengonversi kueri SQL menjadi kueri OpenSearch REST API.

Kueri SQL standar

Anda dapat menggunakan SQL standar dengan sintaksis Lucene untuk ekspresi penelusuran.

SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';

Ganti variabel berikut:

  • OPENSEARCH_FD_TABLE: nama tabel data asing yang merepresentasikan tabel OpenSearch Anda. Contoh, my-fd-opensearch-table.

  • FILTER: (Opsional) filter yang akan diterapkan ke kueri OpenSearch Anda. Contoh, a = 10 AND b < 105.

  • QUERY: kueri yang akan dikirim ke OpenSearch. Contoh, body:database.

DSL Kueri

Untuk kasus penggunaan lanjutan, gunakan Bahasa Khusus Domain (DSL) kueri gaya JSON OpenSearch.

SELECT id, title
FROM OPENSEARCH_FD_TABLE
ORDER BY metadata <@> $${
  "query": {
    "bool": {
      "must": { "match": { "title": "opensearch" } },
      "filter": { "term": { "category": "software" } }
    }
  },
  "sort": [
    { "price": { "order": "desc" } }
  ]
}$$
LIMIT 1;

Ganti OPENSEARCH_FD_TABLE dengan nama tabel data asing yang merepresentasikan tabel OpenSearch Anda. Contoh, my-fd-opensearch-table.

Untuk melakukan penelusuran campuran pada data OpenSearch, gabungkan hasil penelusuran token OpenSearch dengan hasil penelusuran vektor AlloyDB Omni.

SELECT *
FROM ai.hybrid_search(
  ARRAY[
    '{"limit": LIMIT,
      "weight": WEIGHT,
      "table_name": "OPENSEARCH_FD_TABLE",
      "key_column": "id",
      "query_text_input": "QUERY"}'::jsonb
  ])
ORDER BY score DESC;

Ganti variabel berikut:

  • LIMIT: jumlah hasil yang akan ditampilkan. Contoh, 10.

  • WEIGHT: kontribusi entri penelusuran ini terhadap keseluruhan Reciprocal Rank Fusion (RRF). Contoh, 0.5. Jika Anda tidak memberikan bobot, bobot akan didistribusikan secara merata. Untuk mengetahui informasi selengkapnya, lihat Parameter fungsi penelusuran hibrida.

  • OPENSEARCH_FD_TABLE: nama tabel data asing yang merepresentasikan tabel OpenSearch Anda. Contoh, my-fd-opensearch-table.

  • QUERY: kueri yang akan dikirim ke OpenSearch. Contoh, body:database.

Pemecahan masalah

Jika Anda mengalami masalah autentikasi atau konektivitas saat membuat kueri cluster OpenSearch, periksa hal berikut:

  • Error autentikasi HTTP 401 atau 403: Pastikan secret OpenSearch Anda di Secret Manager berisi string yang diformat sebagai username:password dan akun layanan Anda memiliki izin secretmanager.secretAccessor.
  • Waktu tunggu koneksi habis: Verifikasi aturan jaringan dan konfigurasi firewall antara AlloyDB Omni dan endpoint OpenSearch Anda.

Batasan

  • Hanya baca: AlloyDB Omni membaca, tetapi tidak menulis ke, data OpenSearch.
  • Pengelolaan data: AlloyDB Omni tidak mengindeks data database Anda secara otomatis ke OpenSearch. Anda bertanggung jawab untuk mengisi indeks OpenSearch dan menjaga konsistensi antara data di AlloyDB Omni dan data yang diindeks di OpenSearch.
  • Pengelolaan skema: AlloyDB Omni tidak otomatis menyinkronkan skema dengan OpenSearch. Jika skema indeks OpenSearch Anda berubah, perbarui skema tabel asing PostgreSQL yang sesuai secara manual.
  • Jenis yang tidak didukung: jenis OpenSearch khusus, seperti jenis geospasial, tidak didukung.
  • Autentikasi: Anda harus menggunakan autentikasi Dasar (nama pengguna dan sandi) yang dikonfigurasi di cluster OpenSearch Anda.

Langkah berikutnya