אתם יכולים לגשת לנתונים שמאוחסנים ב-Apache Solr ולחפש אותם באמצעות שילוב החיפוש החיצוני ב-AlloyDB ל-PostgreSQL.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
מוסיפים קישוריות של כתובת IP ציבורית יוצאת במכונת AlloyDB הראשית.
פריסה והפעלה של אשכול Solr עם כתובת URL ציבורית שניתן לגשת אליה.
אחסון פרטי כניסה ל-Solr ב-Secret Manager
מערכת AlloyDB מאחסנת את פרטי הכניסה שלכם ל-Solr וקוראת אותם מ-Secret Manager. באימות בסיסי, הערך של הסוד ב-Secret Manager חייב להיות מחרוזת בקידוד Base64 בפורמט username:password. מידע נוסף על השימוש ב-Secret Manager זמין במאמר יצירה וגישה לסוד באמצעות Secret Manager.
מוודאים שלחשבון השירות שלכם ב-AlloyDB יש את התפקיד Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) כדי לקרוא את הסוד מ-Secret Manager. מידע נוסף מופיע במאמר בנושא יצירה של סוד וגישה אליו באמצעות Secret Manager.
הפעלה והגדרה של התוסף external_search_fdw
כדי להתחיל את השילוב עם Solr, צריך להגדיר גישה לאשכול Solr דרך שרת נתונים חיצוני.
CREATE EXTENSION external_search_fdw;
CREATE SERVER SOLR_SERVER_NAME
FOREIGN DATA WRAPPER external_search_fdw
OPTIONS (
server 'SOLR_SERVER_HOST_PORT',
search_provider 'solr',
auth_mode 'secret_manager',
auth_method 'AUTH_METHOD',
secret_path 'SECRET_PATH'
);
מחליפים את המשתנים הבאים:
SOLR_SERVER_NAME: השם של שרת הנתונים החיצוני. לדוגמה:solr.SOLR_SERVER_HOST_PORT: כתובת URL שפונה לציבור של אשכול SOLR. לדוגמה:https://node1.solr.test.com:8983.
AUTH_METHOD: סוג האימות שרוצים להשתמש בו. לדוגמה,Basic.
SECRET_PATH: הנתיב ב-Secret Manager לפרטי הכניסה לאימות של Solr. לדוגמה,projects/123456789012/secrets/apikey/versions/1. 123456789012מייצג את מזהה הפרויקט ב- Google Cloud .
מגדירים את מיפוי המשתמשים ב-PostgreSQL לשרת Solr. שימו לב: כדי להשתמש ב-FDW של PostgreSQL, צריך למפות את המשתמשים. ב-AlloyDB, האימות מתבצע באמצעות כותרת ההרשאה של REST.
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;ממפים את הסכימה של אוסף Solr לטבלה חיצונית של PostgreSQL.
CREATE FOREIGN TABLE SOLR_FD_TABLE( metadata external_search_fdw_schema.OpaqueMetadata, SOLR_FIELDS) SERVER SOLR_SERVER_NAME OPTIONS( remote_table_name 'SOLR_COLLECTION_NAME' unique_key_sort_suffix 'UNIQUE_KEY_SORT_SUFFIX' );מחליפים את המשתנים החדשים הבאים:
SOLR_FD_TABLE: שם טבלת הנתונים החיצונית שמייצגת את טבלת Solr. לדוגמה,my-fd-solr-table.
SOLR_FIELDS: רשימה מופרדת בפסיקים שבה כל רשומה היא בפורמטsolr_field_name PG_DATA_TYPE. במאמר סוגי נתונים נתמכים תוכלו למצוא רשימה של סוגי הנתונים הנתמכים ב-Solr וסוגי הנתונים התואמים ב-PostgreSQL.
UNIQUE_KEY_SORT_SUFFIX: (אופציונלי) שדה המפתח הייחודי ב-Solr, או רשימה מופרדת בפסיקים של כמה שדות עם סדר המיון שלהם, לדוגמה,myid0 ASC, myid1 DESC, שמשמשת להחלפה בין דפים. ברירת המחדל היאid.
PG_DATA_TYPE: סוג ה-PostgreSQL שאליו רוצים למפות את הנתונים. דוגמאות נפוצות:TEXTלנתוני מחרוזת.INTEGERלנתונים מספריים.
SOLR_COLLECTION_NAME: השם של אוסף Solr. לדוגמה,my-solr-collection.
הפעלת שאילתות על נתוני Solr
AlloyDB מקבל שאילתות SQL וממיר אותן לשאילתות Solr API בארכיטקטורת REST.
כדי לשלוח שאילתה לנתוני Solr, יש לכם את האפשרויות הבאות:
- שאילתות SQL סטנדרטיות
- Query DSL
- חיפושים היברידיים
שאילתות SQL סטנדרטיות
אפשר להשתמש ב-SQL סטנדרטי עם תחביר Lucene לביטוי החיפוש.
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
מחליפים את המשתנים הבאים:
SOLR_FD_TABLE: שם טבלת הנתונים החיצונית שמייצגת את טבלת Solr. לדוגמה,my-fd-solr-table.(אופציונלי)
FILTER: מסנן להחלה על שאילתת Solr. לדוגמה,AND qubits < 105.
QUERY: שאילתה לשליחה אל Solr. לדוגמה,body:database.
Query DSL
בתרחישי שימוש מתקדמים, משתמשים ב-Query DSL בסגנון JSON של Solr.
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
מחליפים את SOLR_FD_TABLE בשם של טבלת הנתונים החיצונית שמייצגת את טבלת Solr. לדוגמה, my-fd-solr-table.
חיפושים היברידיים
כדי לבצע חיפוש היברידי בנתוני Solr, מצטרפים לתוצאות של חיפוש טוקנים ב-Solr עם תוצאות של חיפוש וקטורי ב-AlloyDB.
SELECT *
FROM ai.hybrid_search(
ARRAY[
'{"limit": LIMIT,
"weight": WEIGHT,
"table_name": "SOLR_FD_TABLE",
"key_column": "id",
"query_text_input": "QUERY"}'::jsonb
])
ORDER BY score DESC;
מחליפים את המשתנים הבאים:
LIMIT: מספר התוצאות שיוחזרו. לדוגמה,10.
WEIGHT: התרומה של רשומת החיפוש הזו ל-RRF הכולל. לדוגמה,0.5.
SOLR_FD_TABLE: שם טבלת הנתונים החיצונית שמייצגת את טבלת Solr. לדוגמה,my-fd-solr-table.
QUERY: שאילתה לשליחה אל Solr. לדוגמה, "solr_field_name:\"cloud databases\""מחפש את הביטוי 'cloud databases' בשדהsolr_field_name.
פתרון בעיות
אם נתקלים בבעיות באימות או בקישוריות כשמבצעים שאילתה באשכול Solr, כדאי לבדוק את הסיבות הנפוצות הבאות:
- שגיאות אימות HTTP 401 או 403: מוודאים שהסוד של Solr ב-Secret Manager מכיל מחרוזת מקודדת ב-Base64 בפורמט
username:password, ושלחשבון השירות שבו נעשה שימוש ב-AlloyDB יש את ההרשאהsecretmanager.secretAccessor. - פסק זמן לחיבור: מוודאים שהקישוריות של כתובת ה-IP הציבורית היוצאת מופעלת במופע הראשי של AlloyDB, ושהחיבורים הנכנסים מותרים בחומת האש של Solr ביציאה שצוינה.
מגבלות
לפני שמחברים את AlloyDB ל-Solr, חשוב להביא בחשבון את המגבלות הבאות:
שילוב של Solr זמין רק בגרסה ראשית של PostgreSQL
17ואילך.AlloyDB קורא נתונים של Solr, אבל לא כותב אותם.
AlloyDB לא יוצר אינדקס אוטומטי של נתוני מסד הנתונים ב-Solr. אתם אחראים לאכלוס האוספים של Solr ולשמירה על עקביות בין הנתונים ב-AlloyDB לבין הנתונים שעברו אינדוקס ב-Solr.
AlloyDB לא מסנכרן סכימות עם Solr באופן אוטומטי. אם סכימת האוסף של Solr משתנה, צריך לעדכן ידנית את הסכימה של הטבלה החיצונית התואמת של PostgreSQL.
בניגוד ל-Elasticsearch, ב-Solr אין שדות מוגדרים מראש מסוג JSON. חובה למפות את השדות מסוג JSON למחרוזות בפורמט
TEXTאוjsonb.כדי שהחלוקה לדפים ב-Solr תפעל בצורה תקינה, צריך להשתמש במפתח ייחודי בביטוי המיון. כברירת מחדל, המערכת משתמשת בשדה
id. כשיוצרים את הטבלה החיצונית, אפשר לציין שדה מותאם אישית או רשימה מופרדת בפסיקים של כמה שדות, יחד עם סדר המיון של כל אחד מהם. לדוגמה,myid0 ASC, myid1 DESC, באמצעות האפשרותunique_key_sort_suffix.
המאמרים הבאים
- איך ניגשים לנתוני OpenSearch
- איך ניגשים לנתונים ב-Elasticsearch
- איך מריצים חיפוש היברידי של דמיון וקטורי