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

בוחרים גרסת תיעוד:

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

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

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

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

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

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

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

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

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

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

    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/PROJECT_ID/secrets/apikey/versions/1.

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

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER SOLR_SERVER_NAME;
    
  4. ממפים את הסכימה של אוסף 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 שאליו רוצים למפות את הסוג ב-Spanner. לדוגמה:

      • TEXT לנתוני מחרוזת.
      • ‫INTEGER לנתונים מספריים.
    • ‫SOLR_COLLECTION_NAME: השם של אוסף Solr. לדוגמה, my-solr-collection.

שליחת שאילתות לגבי נתוני Solr

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

שאילתות 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. לדוגמה, a = 10 AND qubits < 105.

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

Query DSL

בתרחישים מתקדמים לדוגמה – כמו הטמעה של שאילתות בתצוגת עץ, מיון בהתאמה אישית או סינון מורכב – משתמשים ב-Query DSL בסגנון Solr JSON.

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 Omni.

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: התרומה של רשומת החיפוש הזו ל-Reciprocal Rank Fusion‏ (RRF) הכולל. לדוגמה, 0.5. אם לא תספקו משקלים, הם יחולקו באופן שווה. מידע נוסף זמין במאמר פרמטרים של פונקציית חיפוש משולב.

  • ‫SOLR_FD_TABLE: שם טבלת הנתונים החיצונית שמייצגת את טבלת Solr. לדוגמה, my-fd-solr-table.

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

פתרון בעיות

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

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

  • זמן קצוב לתפוגה של החיבור: בודקים את כללי הרשת ואת ההגדרות של חומת האש בין AlloyDB Omni לבין נקודת הקצה של Solr.

מגבלות

  • לקריאה בלבד: AlloyDB Omni קורא נתונים מ-Solr, אבל לא כותב אליו.

  • ניהול נתונים: AlloyDB Omni לא מוסיף באופן אוטומטי את נתוני מסד הנתונים לאינדקס ב-Solr. אתם אחראים לאכלס את האוספים של Solr ולשמור על עקביות בין הנתונים ב-AlloyDB Omni לבין הנתונים שנוספו לאינדקס ב-Solr.

  • ניהול סכימות: AlloyDB Omni לא מסנכרן סכימות באופן אוטומטי עם Solr. אם הסכימה של אוסף Solr משתנה, צריך לעדכן ידנית את הסכימה של הטבלה החיצונית התואמת ב-PostgreSQL.

  • סוגים לא נתמכים: סוגי Solr מיוחדים, כמו סוגים גיאו-מרחביים, לא נתמכים.

  • מיון יציב: כדי שהעימוד יעבוד כמו שצריך, נדרש מפתח ייחודי בביטוי המיון של Solr. כברירת מחדל, המערכת משתמשת בשדה id. כדי לציין שדה בהתאמה אישית, או רשימה מופרדת בפסיקים של כמה שדות יחד עם סדרי המיון שלהם, משתמשים באפשרות unique_key_sort_suffix כשיוצרים את הטבלה החיצונית. לדוגמה, מציינים myid0 ASC, myid1 DESC.

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