חיפוש מחרוזת משנה

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

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

  • לא תלוי-רישיות, מתעלם מרוב סימני הפיסוק ומנרמל את הרווחים הלבנים.
  • אין פילוח לפי סינית, יפנית או קוריאנית (CJK), כי שאילתות חלקיות ב-CJK לרוב מפולחות בצורה שגויה.
  • אם מחפשים כמה מונחים, התוצאה צריכה להכיל מחרוזת משנה מכל מונח. לדוגמה, 'happ momen' תואם ל-"happy moment", כי שתי המחרוזות נמצאות בטקסט. הוא לא תואם ל-"happy day".

דוגמאות

טקסט מאוחסן שאילתת מחרוזת משנה התאמה
Bridge over Troubled Water ridg roub כן
Bridge over Troubled Water ridg , roub כן
Bridge over Troubled Water over brid כן
Bridge over Troubled Water גשר ate כן
Bridge over Troubled Water Bridge bridge bridge כן
Bridge over Troubled Water bri trou ter כן
Bridge over Troubled Water bri dge כן
Bridge over Troubled Water troubledwater לא
Bridge over Troubled Water trubled לא

כדי לחפש מחרוזת משנה, משתמשים בפונקציה TOKENIZE_SUBSTRING בהגדרת העמודה TOKENLIST, כמו בדוגמה הבאה של DDL:

GoogleSQL

CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

PostgreSQL

בדוגמה הזו נעשה שימוש ב-spanner.tokenize_substring.

CREATE TABLE albums (
albumid character varying NOT NULL,
albumtitle character varying,
albumtitle_tokens spanner.tokenlist
    GENERATED ALWAYS AS (spanner.tokenize_substring(albumtitle)) VIRTUAL HIDDEN,
PRIMARY KEY(albumid));

בשאלת ה-SQL, משתמשים בפונקציה SEARCH_SUBSTRING בתנאי WHERE. לדוגמה, השאילתה הבאה מתאימה לאלבום עם הכותרת 'happy' מהטבלה שנוצרה בדוגמה הקודמת:

GoogleSQL

SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');

PostgreSQL

בדוגמה הזו נעשה שימוש ב-spanner.search_substring.

SELECT album
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');

TOKENIZE_SUBSTRING יוצרת n-grams לכל טוקן ומאחסנת את ה-n-grams האלה באינדקס החיפוש. אפשר להגדיר את האורך המינימלי והמקסימלי של ה-n-גרמים שייווצרו באמצעות ארגומנטים אופציונליים.

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

בדומה ל-TOKENIZE_FULLTEXT, אפשר להגדיר את TOKENIZE_SUBSTRING כך שישתמש בסוגים ספציפיים של תוכן.

בנוסף לחיפוש הבסיסי של מחרוזת משנה, SEARCH_SUBSTRING תומך במצב חיפוש יחסי. חיפוש יחסי משפר את תוצאות החיפוש של מחרוזת משנה.

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

כשחיפוש יחסי מופעל בטוקניזציה, SEARCH_SUBSTRING יכול לבצע שאילתות עם סוגי החיפוש היחסיים הבאים:

  • phrase: התאמות של מחרוזות משנה רציפות

    דוגמאות

    טקסט מאוחסן שאילתת מחרוזת משנה. התאמה
    Bridge over Troubled Water גשר כן
    Bridge over Troubled Water Bridge bridge bridge לא
    Bridge over Troubled Water brid over לא
    Bridge over Troubled Water ridge over trouble כן
    Bridge over Troubled Water bridge ove troubled לא
    Bridge over Troubled Water idge ove כן
    Bridge over Troubled Water idge , ove כן
    Bridge over Troubled Water RIDGE OVE כן
    Bridge over Troubled Water גשר מים לא
  • value_prefix: מחפשת התאמה למחרוזות משנה רצופות, וההתאמה צריכה להתחיל בתחילת הערך. הפונקציה הזו דומה מבחינה קונספטואלית לפונקציה STARTS_WITH למחרוזות שעברו נורמליזציה של אותיות רישיות ורווחים.

    דוגמאות

    טקסט מאוחסן שאילתת מחרוזת משנה התאמה
    Bridge over Troubled Water גשר כן
    Bridge over Troubled Water גשר , מעל כן
    Bridge over Troubled Water רכס מעל לא
    Bridge over Troubled Water troubled water לא
  • value_suffix: מחפש התאמה למחרוזות משנה רציפות, וההתאמה צריכה להיות בסוף הערך. זה דומה מבחינה רעיונית לפונקציה ENDS_WITH למחרוזות מנורמלות של אותיות רישיות ורווחים.

    דוגמאות

    טקסט מאוחסן שאילתת מחרוזת משנה. התאמה
    Bridge over Troubled Water troubled water כן
    Bridge over Troubled Water troubled ; water כן
    Bridge over Troubled Water roubled water כן
    Bridge over Troubled Water מים עכורים לא
    Bridge over Troubled Water בעיות במים לא
    Bridge over Troubled Water גשר לא
  • word_prefix: כמו value_prefix, אבל המחרוזת צריכה להתאים לגבול של מונח (ולא לגבול של ערך).

    דוגמאות

    טקסט מאוחסן שאילתת מחרוזת משנה התאמה
    Bridge over Troubled Water over trouble כן
    Bridge over Troubled Water מעל , בעיה כן
    Bridge over Troubled Water troub water לא
    Bridge over Troubled Water מעל המים לא
    Bridge over Troubled Water ove troubled לא
    Bridge over Troubled Water ver troubled כן
  • word_suffix: כמו value_suffix, אבל המחרוזת צריכה להתאים לסוף של גבול מונח.

    דוגמאות

    טקסט מאוחסן שאילתת מחרוזת משנה התאמה
    Bridge over Troubled Water ver troubled כן
    Bridge over Troubled Water over trouble לא
    Bridge over Troubled Water מעל המים לא
    Bridge over Troubled Water ove troubled לא

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