יצירת אינדקס ScaNN

אפשר להשתמש בהטמעות מאוחסנות כדי ליצור אינדקסים של וקטורים של ScaNN והטמעות של שאילתות באמצעות AlloyDB ל-PostgreSQL.

אינדקס ScaNN הוא אינדקס קוונטיזציה מבוסס-עץ לחיפוש של השכן הקרוב ביותר המשוער, שנוצר על ידי Google. הוא מספק זמן בניית אינדקס קצר יותר וטביעת רגל קטנה יותר בזיכרון בהשוואה ל-HNSW. בנוסף, הוא מספק QPS מהיר יותר בהשוואה ל-HNSW, בהתאם לעומס העבודה.

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

לפני שמתחילים ליצור אינדקסים, צריך לוודא שמתקיימים התנאים המוקדמים הבאים.

יצירת אינדקס עם כוונון אוטומטי

אינדקסים של ScaNN שעברו כוונון אוטומטי מפשטים את יצירת האינדקסים בכך שהם מאפשרים ל-AlloyDB לנהל ולכוון את מבנה האינדקס. אם אתם צריכים שליטה פרטנית בהתאמת האינדקס, אתם יכולים ליצור אינדקס ScaNN בהתאמה אישית.

אפשר לבצע אופטימיזציה של אינדקסים שעברו כוונון אוטומטי בשתי דרכים:

  • (ברירת מחדל) אחזור וזמן אחזור של חיפוש וקטורי במחיר של זמן בניית האינדקס
  • איזון בין זמן בניית האינדקס לבין ביצועי החיפוש

כדי ליצור אינדקס ScaNN עם כוונון אוטומטי, מריצים את הפקודה הבאה.

CREATE INDEX INDEX_NAME ON TABLE
       USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)

מחליפים את מה שכתוב בשדות הבאים:

  • INDEX_NAME: השם של האינדקס שרוצים ליצור. לדוגמה, my_scann_index. שמות האינדקסים משותפים לכל מסד הנתונים. מוודאים שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.

  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.

  • EMBEDDING_COLUMN: העמודה שבה מאוחסנים נתוני vector.

  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש עם האינדקס הזה. צריך לבחור אחת מהאפשרויות:

    • מרחק L2: ‏ l2

    • מכפלה סקלרית: dot_product

    • מרחק קוסינוס: cosine

הפקודה הזו יוצרת אינדקס ScaNN שעבר אופטימיזציה לביצועי חיפוש ומבצעת תחזוקה אוטומטית של האינדקס. אם רוצים לשנות את אחת מההגדרות האלה, מריצים את הפקודה הבאה:

CREATE INDEX INDEX_NAME ON TABLE
       USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (MODE='AUTO',
      OPTIMIZATION='OPTIMIZATION',
      auto_maintenance='AUTO_MAINTENANCE')

מחליפים את מה שכתוב בשדות הבאים:

  • INDEX_NAME: השם של האינדקס שרוצים ליצור. לדוגמה, my_scann_index. שמות האינדקסים משותפים לכל מסד הנתונים. מוודאים שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.

  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.

  • EMBEDDING_COLUMN: העמודה שבה מאוחסנים נתוני vector.

  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש עם האינדקס הזה. צריך לבחור אחת מהאפשרויות:

    • מרחק L2: ‏ l2

    • מכפלה סקלרית: dot_product

    • מרחק קוסינוס: cosine

  • (אופציונלי) OPTIMIZATION: מוגדר לאחת מהאפשרויות הבאות:

    • (ברירת מחדל) SEARCH_OPTIMIZED: אופטימיזציה של ההחזרה של חיפוש וקטורי ושל זמן האחזור של חיפוש וקטורי, על חשבון זמני בניית אינדקס ארוכים יותר.

    • BALANCED: זמן בניית אינדקס האיזון וביצועי החיפוש.

    אם המדיניות OPTIMIZATION מוגדרת, חובה לכלול גם את MODE='AUTO'.

  • (אופציונלי) AUTO_MAINTENANCE: קובעת אם תחזוקה אוטומטית של האינדקס מופעלת או מושבתת. מידע נוסף על תחזוקה אוטומטית זמין במאמר בנושא תחזוקה של אינדקסים של וקטורים.

    • (ברירת מחדל) ON: מערכת AlloyDB מבצעת תחזוקה אוטומטית של האינדקס.

    • OFF: ‏ AlloyDB לא מבצע תחזוקה אוטומטית באינדקס.

יצירת אינדקס שכוונן באופן ידני

אם לאפליקציה שלכם יש דרישות ספציפיות לגבי זמני אחזור ובניית אינדקס, אתם יכולים ליצור ולכוון את אינדקס ScaNN באופן ידני.

כדי ליצור באופן ידני אינדקס ScaNN לעמוד שמכיל וקטורים מוטמעים מאוחסנים, אפשר להשתמש בפקודות הבאות.

אינדקס של עץ עם שתי רמות

CREATE INDEX INDEX_NAME ON TABLE
       USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (mode='MANUAL',
      num_leaves=NUM_LEAVES_VALUE,
      quantizer=QUANTIZER,
      auto_maintenance=AUTO_MAINTENANCE);
  • INDEX_NAME: השם של האינדקס שרוצים ליצור. לדוגמה: my_scann_index. שמות האינדקסים משותפים בכל מסד הנתונים. חשוב לוודא שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.
  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.
  • EMBEDDING_COLUMN: העמודה שבה מאוחסנים נתוני `vector`.
  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש באינדקס הזה. בוחרים באחת מהאפשרויות הבאות:
    • מרחק L2: ‏ l2
    • מכפלה סקלרית: dot_product
    • מרחק קוסינוס: cosine
  • NUM_LEAVES_VALUE: מספר המחיצות שיחולו על האינדקס הזה. הערך יכול להיות בין 1 ל-30 מיליון. מידע נוסף על בחירת הערך הזה זמין במאמר שיפור מדד ScaNN.
  • QUANTIZER: סוג הכמת שרוצים להשתמש בו. שימו לב שאפשר לטעון את אינדקס ScaNN לתוך מנוע עמודות כדי להאיץ עוד יותר את חיפוש הווקטורים. בוחרים באחת מהאפשרויות הבאות:
    • (ברירת מחדל) SQ8: מספק איזון בין ביצועי השאילתה לבין אובדן מינימלי של נתונים. השיעור הזה בדרך כלל נמוך מ-1-2%.
    • תצוגה מקדימה AH: גיבוב אסימטרי (AH) דחוס עד פי 4 בהשוואה ל-SQ8. כדי לשפר את הביצועים של השאילתות כשמנוע העמודות מופעל והנתונים של האינדקס והטבלה מאוכלסים במנוע העמודות, כדאי לשקול את האפשרות הזו. מידע נוסף זמין במאמר בנושא שיטות מומלצות להתאמת ScaNN.
    • FLAT: מספק את הזיכרון הכי טוב, 99% ומעלה, על חשבון ביצועי החיפוש.
  • (אופציונלי) AUTO_MAINTENANCE: ההגדרה הזו קובעת אם תחזוקה אוטומטית של האינדקס מופעלת או מושבתת. מידע נוסף על תחזוקה אוטומטית זמין במאמר בנושא תחזוקה של אינדקסים של וקטורים.
    • (ברירת מחדל) ON: מערכת AlloyDB מבצעת תחזוקה אוטומטית באינדקס.
    • OFF: מערכת AlloyDB לא מבצעת תחזוקה אוטומטית של האינדקס.

אינדקס עץ עם שלוש רמות

CREATE INDEX INDEX_NAME ON TABLE
       USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (mode='MANUAL',
      num_leaves=NUM_LEAVES_VALUE,
      quantizer=QUANTIZER,
      auto_maintenance=AUTO_MAINTENANCE,
      max_num_levels = 2);
  • INDEX_NAME: השם של האינדקס שרוצים ליצור. לדוגמה: my_scann_index. שמות האינדקסים משותפים בכל מסד הנתונים. חשוב לוודא שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.
  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.
  • EMBEDDING_COLUMN: העמודה שבה מאוחסנים נתוני `vector`.
  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש באינדקס הזה. בוחרים באחת מהאפשרויות הבאות:
    • מרחק L2: ‏ l2
    • מכפלה סקלרית: dot_product
    • מרחק קוסינוס: cosine
  • NUM_LEAVES_VALUE: מספר המחיצות שיחולו על האינדקס הזה. הערך יכול להיות בין 1 ל-30 מיליון. מידע נוסף על בחירת הערך הזה זמין במאמר שיפור מדד ScaNN.
  • QUANTIZER: סוג הכמת שרוצים להשתמש בו. שימו לב שאפשר לטעון את אינדקס ScaNN למנוע העמודות כדי להאיץ עוד יותר את חיפוש הווקטורים. בוחרים באחת מהאפשרויות הבאות:
    • (ברירת מחדל) SQ8: מספק איזון בין ביצועי השאילתה לבין אובדן מינימלי של נתונים. השיעור הזה בדרך כלל נמוך מ-1-2%.
    • תצוגה מקדימה AH: גיבוב אסימטרי (AH) דחוס עד פי 4 בהשוואה ל-SQ8. כדי לשפר את הביצועים של השאילתות כשמנוע העמודות מופעל והנתונים של האינדקס והטבלה מאוכלסים במנוע העמודות, כדאי לשקול את האפשרות הזו. מידע נוסף זמין במאמר בנושא שיטות מומלצות להתאמת ScaNN.
    • FLAT: מספק את הזיכרון הכי טוב, 99% ומעלה, על חשבון ביצועי החיפוש.
  • (אופציונלי) AUTO_MAINTENANCE: ההגדרה הזו קובעת אם תחזוקה אוטומטית של האינדקס מופעלת או מושבתת. מידע נוסף על תחזוקה אוטומטית זמין במאמר בנושא תחזוקה של אינדקסים של וקטורים.
    • (ברירת מחדל) ON: מערכת AlloyDB מבצעת תחזוקה אוטומטית באינדקס.
    • OFF: מערכת AlloyDB לא מבצעת תחזוקה אוטומטית של האינדקס.
  • max_num_levels = 2: המספר המקסימלי של רמות מרכזיות בעץ האשכולות של K-means. מגדירים את הפרמטר הזה לערך 2 כדי ליצור אינדקס עם שלוש רמות.

מדד עץ עם ארבע רמות

CREATE INDEX INDEX_NAME ON TABLE
       USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (mode='MANUAL',
      num_leaves=NUM_LEAVES_VALUE,
      quantizer=QUANTIZER,
      max_num_levels = 3);
  • INDEX_NAME: השם של האינדקס שרוצים ליצור. לדוגמה: my_scann_index. שמות האינדקסים משותפים בכל מסד הנתונים. חשוב לוודא שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.
  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.
  • EMBEDDING_COLUMN: העמודה שבה מאוחסנים נתוני `vector`.
  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש באינדקס הזה. בוחרים באחת מהאפשרויות הבאות:
    • מרחק L2: ‏ l2
    • מכפלה סקלרית: dot_product
    • מרחק קוסינוס: cosine
  • NUM_LEAVES_VALUE: מספר המחיצות שיחולו על האינדקס הזה. הערך יכול להיות בין 1 ל-30 מיליון. מידע נוסף על בחירת הערך הזה זמין במאמר שיפור מדד ScaNN.
  • QUANTIZER: סוג הכמת שרוצים להשתמש בו. שימו לב שאפשר לטעון את אינדקס ScaNN למנוע העמודות כדי להאיץ עוד יותר את חיפוש הווקטורים. בוחרים באחת מהאפשרויות הבאות:
    • (ברירת מחדל) SQ8: מספק איזון בין ביצועי השאילתה לבין אובדן מינימלי של נתונים. השיעור הזה בדרך כלל נמוך מ-1-2%.
    • תצוגה מקדימה AH: גיבוב אסימטרי (AH) דחוס עד פי 4 בהשוואה ל-SQ8. כדי לשפר את הביצועים של השאילתות כשמנוע העמודות מופעל והנתונים של האינדקס והטבלה מאוכלסים במנוע העמודות, כדאי לשקול את האפשרות הזו. מידע נוסף זמין במאמר בנושא שיטות מומלצות להתאמת ScaNN.
    • FLAT: מספק את הזיכרון הכי טוב, 99% ומעלה, על חשבון ביצועי החיפוש.
  • max_num_levels = 3: המספר המקסימלי של רמות מרכזיות בעץ האשכולות של K-means. מגדירים את הפרמטר הזה לערך 3 כדי ליצור אינדקס עם ארבע רמות.

המרת אינדקס שכוונן באופן ידני לאינדקס שכוונן באופן אוטומטי

כדי להמיר אינדקס עם כוונון ידני לאינדקס עם כוונון אוטומטי, מבצעים את השלבים הבאים:

  1. איפוס של כל פרמטרים השאילתה שהוגדרו לאינדקס שעבר כוונון ידני.

    ALTER INDEX INDEX_NAME RESET (PARAMETER_NAME);
    

    מחליפים את המשתנים הבאים:

    • INDEX_NAME: השם של האינדקס שרוצים להמיר. לדוגמה, my_scann_index. השמות של האינדקסים משותפים במסד הנתונים. מוודאים שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.

    • PARAMETER_NAME: רשימה מופרדת בפסיקים שמכילה את השמות של פרמטרים של שאילתה שרוצים לאפס. לדוגמה, num_leaves, quantization.

      חשוב לזכור שצריך לאפס את כל פרמטרי השאילתה האחרים לפני איפוס של num_leaves.

  2. כדי להמיר את האינדקס שהותאם ידנית לאינדקס שהותאם אוטומטית, צריך ליצור מחדש את האינדקס.

    REINDEX INDEX CONCURRENTLY INDEX_NAME;
    

יצירת אינדקס ScaNN ל-real[] סוגי נתונים

כדי ליצור אינדקס לעמודת הטמעה שמשתמשת בסוג הנתונים real[] במקום vector, צריך להמיר את העמודה לסוג הנתונים vector:

CREATE INDEX INDEX_NAME ON TABLE
USING scann (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)) DISTANCE_FUNCTION)

מחליפים את מה שכתוב בשדות הבאים:

  • INDEX_NAME: השם של האינדקס שרוצים ליצור. לדוגמה, my_scann_index. שמות האינדקסים משותפים לכל מסד הנתונים. מוודאים שכל שם אינדקס ייחודי לכל טבלה במסד הנתונים.

  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.

  • DIMENSIONS: מספר המאפיינים שהמודל תומך בהם.

  • EMBEDDING_COLUMN: העמודה שבה מאוחסנים נתוני vector.

  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש עם האינדקס הזה. צריך לבחור אחת מהאפשרויות:

    • מרחק L2: ‏ l2

    • מכפלה סקלרית: dot_product

    • מרחק קוסינוס: cosine

הצגת התקדמות ההוספה לאינדקס

כדי לראות את התקדמות ההוספה לאינדקס, משתמשים בתצוגה pg_stat_progress_create_index:

SELECT * FROM pg_stat_progress_create_index;

בעמודה phase מוצג המצב הנוכחי של יצירת האינדקס. אחרי ששלב בניית האינדקס מסתיים, השורה של האינדקס לא מוצגת.

יצירת אינדקס מושהה לטבלאות ריקות או לטבלאות עם מספר לא מספיק של שורות

כברירת מחדל, אי אפשר ליצור אינדקס ScaNN בטבלה ריקה או בטבלה עם פחות שורות מהערך של אפשרות האינדקס num_leaves.

כדי לעקוף את המגבלה הזו, מפעילים יצירה מושהית של אינדקסים כדי לאפשר ל-AlloyDB להשהות את יצירת האינדקסים עד שמספר השורות בטבלה מגיע לסף שמוגדר על ידי num_leaves. אחרי שהסף מושג, מערכת AlloyDB מתחילה ליצור את האינדקס ברקע.

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

עם זאת, אם אתם מתכננים להוסיף מספר גדול של שורות לטבלה בעסקה אחת, מומלץ לפצל את העסקה לכמה עסקאות או ליצור אינדקס ScaNN בלי להפעיל יצירת אינדקס מושהית.

הפעלת יצירת אינדקסים מושהית

כדי להפעיל יצירת אינדקס מושהית:

  1. מוודאים שהדגל scann.enable_index_maintenance ואחד מהדגלים הבאים מופעלים:

    כדי להגדיר את השימוש בהם, משתמשים ב-gcloud CLI:

    • כדי להפעיל יצירת אינדקס מושהית יחד עם תכונות אחרות בגרסת טרום-השקה:

      gcloud alloydb instances update INSTANCE_ID \
         --database-flags scann.enable_index_maintenance=on \
         --database-flags scann.enable_preview_features=on \
         --region=REGION_ID \
         --cluster=CLUSTER_ID \
         --project=PROJECT_ID
      
    • כדי להפעיל יצירת אינדקס מושהית באופן מפורש בלי להפעיל תכונות אחרות בגרסת בטא:

      gcloud alloydb instances update INSTANCE_ID \
         --database-flags scann.enable_index_maintenance=on \
         --database-flags scann.enable_index_with_insufficient_data=on \
         --region=REGION_ID \
         --cluster=CLUSTER_ID \
         --project=PROJECT_ID
      

    מחליפים את מה שכתוב בשדות הבאים:

    • INSTANCE_ID: המזהה של המכונה.
    • REGION_ID: האזור שבו המכונה ממוקמת, לדוגמה us-central1.
    • CLUSTER_ID: המזהה של האשכול שבו נמצא המופע.
    • PROJECT_ID: מזהה הפרויקט שבו נמצא האשכול.
  2. יוצרים אינדקס ScaNN. אם יוצרים אינדקס במצב ידני, צריך לוודא שהפרמטר auto_maintenance מוגדר לערך on. מידע נוסף זמין במאמר יצירת אינדקס עם כוונון ידני.

מגבלות

  • תהליך הרקע של יצירת אינדקס אוטומטי משתמש בערכי דגלים ברמת מסד הנתונים. גם אם מגדירים דגלים ברמת הסשן באמצעות הפקודה SET LOCAL, התהליך מתייחס לערך הדגל שהוגדר ברמת מסד הנתונים.
  • אם אתם מתכננים להוסיף כמות גדולה של נתונים לטבלה ריקה בעסקה אחת, מומלץ להריץ את העסקה של הוספה אחת ואז ליצור אינדקס ScaNN.

הפעלת יצירת אינדקס בטבלאות ריקות או קטנות

מערכת AlloyDB משתמשת בתיקופים כדי למנוע יצירה של אינדקס ScaNN בטבלה ריקה או בטבלה עם מעט מאוד שורות, מהסיבות הבאות:

  • אינדקס ScaNN עובר אימון על כמות לא מספקת של נתונים. התוצאה יכולה להיות שליפה לא טובה של נתונים בחיפושים של דמיון וקטורי.

  • יכול להיות שתהיה ירידה בביצועי הכתיבה למסד הנתונים.

במקרים של ביצועים לא אופטימליים, מומלץ לדחות את יצירת האינדקס.

עם זאת, בתרחישי פיתוח או בדיקה מסוימים, יכול להיות שתצטרכו ליצור אינדקס בטבלה ריקה או קטנה. במקרים כאלה, אפשר לאלץ יצירת אינדקס. הערה: כדי לכפות יצירת אינדקס, נדרשות הרשאות SUPERUSER.

כדי לאלץ יצירת אינדקס, מבצעים את השלבים הבאים:

  1. מגדירים את הפרמטר scann.allow_blocked_operations ברמת הסשן לערך true במסד הנתונים:

    SET scann.allow_blocked_operations = true;
    
  2. אם למשתמש שמשמש להרצת השאילתות האלה אין SUPERUSERהרשאות, צריך להקצות לו אותן:

    CREATE USER USERNAME WITH SUPERUSER PASSWORD PASSWORD;
    

    מחליפים את המשתנים הבאים:

    • USERNAME: השם של המשתמש שרוצים לתת לו הרשאות SUPERUSER.
    • PASSWORD: הסיסמה של המשתמש.

יצירת אינדקסים במקביל

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

מערכת AlloyDB מבצעת אופטימיזציה אוטומטית של מספר העובדים המקבילים, אבל אפשר לשנות את מספר העובדים המקבילים באמצעות הפרמטרים הבאים של תכנון שאילתות ב-PostgreSQL:

כדי להימנע מבעיות של חוסר זיכרון כשיוצרים את אינדקס ScaNN, צריך לוודא שדגלי מסד הנתונים maintenance_work_mem ו-shared_buffers מוגדרים לערך שקטן מזיכרון המכונה הכולל.

הרצת שאילתה

אחרי שמאחסנים את ההטמעות ומבצעים להן אינדוקס במסד הנתונים, אפשר להתחיל לשלוח שאילתות לנתונים. אי אפשר להריץ שאילתות חיפוש בכמות גדולה באמצעות התוסף alloydb_scann.

כדי למצוא את השכנים הסמנטיים הקרובים ביותר למחרוזת טקסט, אפשר להשתמש בפונקציה google_ml.embedding() כדי לתרגם את הטקסט לווקטור.

מכיוון שהפונקציה google_ml.embedding() מחזירה מערך אמיתי, צריך להחיל את הפונקציה vector על הקריאה לפונקציה באופן מפורש לפני שמחילים אותה על אחד מאופרטורי השכן הקרוב ביותר, למשל <-> למרחק L2. לאחר מכן, האופרטורים האלה יכולים להשתמש באינדקס ScaNN כדי למצוא את השורות במסד הנתונים עם ההטמעות הכי דומות מבחינה סמנטית.

SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY
  google_ml.embedding(
      model_id => 'MODEL_ID',
      content => 'CONTENT')::vector
LIMIT ROW_COUNT

מחליפים את המשתנים הבאים:

  • TABLE: טבלה שמכילה את ההטמעה שאליה משווים את הטקסט.

  • EMBEDDING_COLUMN: העמודה שמכילה את ההטמעות המאוחסנות.

  • DISTANCE_FUNCTION_QUERY: פונקציית המרחק לשימוש בשאילתה הזו. בוחרים את השאילתה המקבילה לפונקציית המרחק כשיוצרים את האינדקס:

    • מרחק L2: ‏ <->

    • מכפלה פנימית: <#>

    • מרחק קוסינוס: <=>

  • MODEL_ID: המזהה של מודל ההטמעה הרשום שרוצים להשתמש בו.

  • CONTENT: מחרוזת הטקסט שרוצים לתרגם להטמעה ולחפש.

  • ROW_COUNT: מספר השורות שיוחזרו. לדוגמה, מציינים 1 אם רוצים את ההתאמה היחידה הכי טובה.

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