אתם יכולים לגשת לנתונים שמאוחסנים ב-OpenSearch ולחפש אותם באמצעות שילוב החיפוש החיצוני ב-AlloyDB Omni. השילוב הזה מאפשר לכם לבצע חיפוש מאוחד במדדים קיימים של OpenSearch ובטבלאות יחסיות בלי להעתיק או להעביר נתונים.
לפני שמתחילים
לפני שמתחילים, צריך לבצע את הפעולות הבאות:
- התקנת AlloyDB Omni באמצעות קונטיינרים.
- פריסה והגדרה של OpenSearch עם נקודת קצה ציבורית נגישה.
- מפעילים את תוסף האבטחה באשכול 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 דרך שרת נתונים חיצוני.
מתחברים למסד הנתונים ומפעילים את התוסף:
CREATE EXTENSION external_search_fdw;יוצרים שרת חיצוני:
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.
מגדירים את מיפוי המשתמשים לשרת OpenSearch:
CREATE USER MAPPING FOR CURRENT_USER SERVER OPENSEARCH_SERVER_NAME;ממפים את הסכימה של אינדקס 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.