גישה לנתוני 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. מידע נוסף על ניהול הגישה לסודות כדי להגדיר את הסוד של מפתח חשבון השירות באשכול מסד הנתונים של Kubernetes, קראו את המאמרים יצירת סוד של Kubernetes באמצעות מפתח חשבון השירות ויצירת אשכול מסד נתונים באמצעות AlloyDB AI.

הפעלה והגדרה של התוסף 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 לשאילתות API בארכיטקטורת REST של OpenSearch.

שאילתות 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

בתרחישים מתקדמים לדוגמה, משתמשים ב-Query Domain Specific Language (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: התרומה של רשומת החיפוש הזו ל-Reciprocal Rank Fusion‏ (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.

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