חיפוש דמיון וקטורי, שנקרא גם חיפוש השכן הקרוב ביותר, ב-AlloyDB ל-PostgreSQL מאפשר למצוא את השורות במסד הנתונים שהכי דומות מבחינה סמנטית לווקטור של השאילתה. אחרי שמאחסנים את ההטמעות ומוסיפים אותן לאינדקס, אפשר להשתמש באופרטורים ובפונקציות המרחק של pgvector כדי לשלוח שאילתות למסד הנתונים של AlloyDB ולמצוא את השכנים הקרובים ביותר.
מידע נוסף על אחסון הטמעות וקטוריות ויצירת אינדקס זמין במאמרים אחסון הטמעות וקטוריות ויצירת אינדקסים.
הרצת חיפוש דמיון עם קלט וקטורי
כדי להריץ חיפוש דמיון, מציינים את הטבלה, עמודת ההטמעה, פונקציית המרחק, הטמעת היעד ומספר השורות שרוצים להחזיר. אפשר גם להשתמש בפונקציה embedding() כדי לתרגם טקסט לווקטור, ואז להשוות את הווקטור להטמעות ששמורות באמצעות אופרטורים של pgvector.
כדי למצוא את השכנים הסמנטיים הקרובים ביותר לווקטור הטמעה, אפשר להריץ את שאילתת הדוגמה הבאה, שבה מגדירים את אותה פונקציית מרחק שבה השתמשתם במהלך יצירת האינדקס.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY 'EMBEDDING'
LIMIT ROW_COUNT;
מחליפים את מה שכתוב בשדות הבאים:
TABLE: הטבלה שמכילה את ההטמעה שאליה משווים את הטקסט.
EMBEDDING_COLUMN: העמודה שמכילה את ההטמעות השמורות.
DISTANCE_FUNCTION_QUERY: פונקציית המרחק שבה משתמשים בשאילתה הזו. בוחרים אחת מהאפשרויות הבאות, בהתאם לפונקציית המרחק שבה השתמשתם כשנוצר האינדקס:מרחק L2:
<->מכפלה פנימית:
<#>מרחק קוסינוס:
<=>
EMBEDDING: וקטור ההטמעה שרוצים למצוא את השכנים הסמנטיים הקרובים ביותר שלו.
ROW_COUNT: מספר השורות שיוחזרו.מציינים
1אם רוצים רק את ההתאמה הטובה ביותר.
למידע נוסף על דוגמאות אחרות לשאילתות, ראו שאילתות.
הרצת חיפוש דמיון באמצעות pgvector עם קלט טקסט
אפשר גם להשתמש בפונקציה embedding() כדי לתרגם את הטקסט לווקטור, ולמצוא את שורות מסד הנתונים עם ההטמעות הכי דומות מבחינה סמנטית. תוסף pgvector PostgreSQL הרגיל מותאם אישית ל-AlloyDB, ונקרא vector. מחילים את הווקטור על אחד מהאופרטורים של השכנים הקרובים ביותר של pgvector, לדוגמה <=> למרחק קוסינוס.
מכיוון שהפונקציה embedding() מחזירה מערך real, צריך להמיר באופן מפורש את הקריאה ל-embedding() ל-vector כדי להשתמש בערכים האלה עם אופרטורים של pgvector.
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT;
מחליפים את מה שכתוב בשדות הבאים:
-
MODEL_ID: מזהה המודל שרוצים לשלוח אליו שאילתה.אם אתם משתמשים ב-Model Garden, ציינו את
text-embedding-005בתור מזהה המודל. אלה המודלים מבוססי-הענן ש-AlloyDB יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר הטמעות טקסט. - (אופציונלי)
VERSION_TAG: תג הגרסה של המודל שרוצים לשלוח אליו שאילתה. מוסיפים את התג@בתחילת השורה.אם אתם משתמשים באחד מהמודלים של
text-embedding-005באנגלית ב-Gemini Enterprise Agent Platform, ציינו את אחד מתגי הגרסאות, למשלtext-embedding-005, שמפורטים בקטע גרסאות המודלים.Google ממליצה מאוד לציין תמיד את תג הגרסה. אם לא תציינו את תג הגרסה, AlloyDB ישתמש בגרסת המודל האחרונה, מה שעלול להוביל לתוצאות לא צפויות.
TABLE: הטבלה שרוצים לשלוח אליה שאילתה.
EMBEDDING_COLUMN: העמודה שמכילה את ההטמעות השמורות.
TEXT: הטקסט שרוצים לתרגם להטמעת וקטורים.
ROW_COUNT: מספר השורות שיוחזרו.
כדי להאיץ את החיפוש המסונן של KNN, אתם יכולים להשתמש במנוע מבוסס-העמודות של AlloyDB. מידע נוסף זמין במאמרים האצת החיפוש הווקטורי המסונן והגדרת המנוע מבוסס-העמודות.
המאמרים הבאים
- מדריך לביצוע חיפוש וקטורי
- כוונון הביצועים של שאילתות וקטוריות
- מדדים של אינדקס וקטורי
- איך יוצרים עוזר חכם לשופינג באמצעות AlloyDB, pgvector וניהול נקודות קצה של מודלים
- מידע נוסף על ניהול נקודות קצה של מודלים