אתם יכולים לגשת לנתונים שמאוחסנים ב-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 לשאילתות 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.