גישה לנתוני OpenSearch מ-AlloyDB Omni

בוחרים גרסה של מאמרי העזרה:

אתם יכולים לגשת לנתונים שמאוחסנים ב-OpenSearch ולחפש אותם באמצעות שילוב החיפוש החיצוני ב-AlloyDB Omni. השילוב הזה מאפשר לכם לבצע חיפוש מאוחד במדדים קיימים של OpenSearch ובטבלאות יחסיות בלי להעתיק או להעביר נתונים.

לפני שמתחילים

לפני שמתחילים, צריך לבצע את הפעולות הבאות:

אחסון פרטי כניסה ל-OpenSearch ב-Secret Manager

‫AlloyDB Omni שומר את פרטי הכניסה של OpenSearch וקורא אותם מ-Secret Manager. באימות HTTP בסיסי, הערך של הסוד ב-Secret Manager צריך להיות מחרוזת בפורמט username:password. מידע נוסף על השימוש ב-Secret Manager זמין במאמר יצירה וגישה לסוד באמצעות Secret Manager.

מוודאים שלחשבון השירות שבו משתמש AlloyDB Omni יש את ההרשאה secretmanager.secretAccessor לקרוא את הסוד מ-Secret Manager. מידע נוסף מופיע במאמר בנושא ניהול הגישה לסודות.

הפעלה והגדרה של התוסף external_search_fdw

כדי להתחיל את השילוב עם OpenSearch, צריך להגדיר גישה לאשכול OpenSearch דרך שרת נתונים חיצוני.

  1. מתחברים למסד הנתונים ומפעילים את התוסף:

    CREATE EXTENSION external_search_fdw;
    
  2. יוצרים שרת חיצוני:

    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'
    );
    

    מחליפים את המשתנים הבאים:

    • OPENSEARCH_SERVER_NAME: השם של שרת הנתונים החיצוני. לדוגמה, opensearch.

    • OPENSEARCH_SERVER_HOST_PORT: כתובת URL שפונה לציבור של אשכול OpenSearch. לדוגמה, https://search-my-domain.us-east-1.es.amazonaws.com:443.

    • AUTH_METHOD: סוג האימות שבו רוצים להשתמש. לדוגמה, Basic.

    • SECRET_PATH: הנתיב ב-Secret Manager לפרטי האימות של OpenSearch. לדוגמה, projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.

  3. מגדירים את מיפוי המשתמשים לשרת OpenSearch:

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. ממפים את הסכימה של אינדקס OpenSearch לטבלה חיצונית של 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'
           );
    

    מחליפים את המשתנים הבאים:

    • OPENSEARCH_FD_TABLE: השם של טבלת הנתונים החיצונית שמייצגת את טבלת OpenSearch. לדוגמה, my-fd-opensearch-table.

    • OPENSEARCH_FIELDS: רשימה מופרדת בפסיקים שבה כל רשומה היא בפורמט opensearch_field_name PG_DATA_TYPE. במאמר סוגי נתונים נתמכים מפורטת רשימה של סוגי הנתונים הנתמכים ב-OpenSearch וסוגי הנתונים התואמים ב-PostgreSQL.

    • OPENSEARCH_INDEX_NAME: השם של אינדקס OpenSearch. לדוגמה, my-opensearch-index.

שליחת שאילתות לנתוני OpenSearch

‫AlloyDB Omni ממיר שאילתות SQL לשאילתות OpenSearch API בארכיטקטורת REST.

שאילתות SQL סטנדרטיות

אפשר להשתמש ב-SQL סטנדרטי עם תחביר Lucene לביטוי החיפוש.

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

מחליפים את המשתנים הבאים:

  • OPENSEARCH_FD_TABLE: השם של טבלת הנתונים החיצונית שמייצגת את טבלת OpenSearch. לדוגמה, my-fd-opensearch-table.

  • FILTER: (אופציונלי) מסנן להחלה על שאילתת OpenSearch. לדוגמה, a = 10 AND b < 105.

  • QUERY: שאילתה לשליחה אל OpenSearch. לדוגמה, body:database.

Query DSL

לתרחישי שימוש מתקדמים, אפשר להשתמש בשפת שאילתות ספציפית לדומיין (DSL) בסגנון 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;

מחליפים את OPENSEARCH_FD_TABLE בשם של טבלת הנתונים החיצונית שמייצגת את טבלת OpenSearch. לדוגמה, my-fd-opensearch-table.

כדי לבצע חיפוש היברידי בנתוני OpenSearch, צריך לצרף את תוצאות החיפוש של טוקנים ב-OpenSearch לתוצאות החיפוש הווקטורי ב-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;

מחליפים את המשתנים הבאים:

  • LIMIT: מספר התוצאות שיוחזרו. לדוגמה, 10.

  • WEIGHT: התרומה של רשומת החיפוש הזו ל-RRF הכולל. לדוגמה, 0.5. אם לא תציינו משקלים, הם יחולקו באופן שווה. מידע נוסף זמין במאמר פרמטרים של פונקציית חיפוש היברידית.

  • OPENSEARCH_FD_TABLE: השם של טבלת הנתונים החיצונית שמייצגת את טבלת OpenSearch. לדוגמה, my-fd-opensearch-table.

  • QUERY: שאילתה לשליחה אל OpenSearch. לדוגמה, body:database.

פתרון בעיות

אם נתקלים בבעיות באימות או בקישוריות כשמבצעים שאילתה באשכול OpenSearch, כדאי לבדוק את הדברים הבאים:

  • שגיאות אימות HTTP 401 או 403: מוודאים שהסוד של OpenSearch ב-Secret Manager מכיל מחרוזת בפורמט username:password ושלחשבון השירות יש הרשאה secretmanager.secretAccessor.
  • פסק זמן לחיבור: צריך לוודא את כללי הרשת ואת הגדרות חומת האש בין AlloyDB Omni לבין נקודת הקצה של OpenSearch.

מגבלות

  • קריאה בלבד: AlloyDB Omni קורא נתונים של OpenSearch, אבל לא כותב אותם.
  • ניהול נתונים: מערכת AlloyDB Omni לא יוצרת אינדקס אוטומטי של נתוני מסד הנתונים ב-OpenSearch. אתם אחראים לאכלוס האינדקסים של OpenSearch ולשמירה על עקביות בין הנתונים ב-AlloyDB Omni לבין הנתונים באינדקס ב-OpenSearch.
  • ניהול סכימות: AlloyDB Omni לא מסנכרן סכימות עם OpenSearch באופן אוטומטי. אם הסכימה של אינדקס OpenSearch משתנה, צריך לעדכן ידנית את הסכימה של הטבלה הזרה התואמת ב-PostgreSQL.
  • סוגים לא נתמכים: לא ניתן להשתמש בסוגים מיוחדים של OpenSearch, כמו סוגים גיאוגרפיים.
  • אימות: צריך להשתמש באימות בסיסי (שם משתמש וסיסמה) שהוגדר באשכול OpenSearch.

המאמרים הבאים