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

בנוסף להתאמה מלאה של טוקנים, אינדקסים של חיפושים ב-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 גשר אכילה כן
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);

CREATE SEARCH INDEX AlbumsTitleIndex ON Albums(AlbumTitle_Tokens);

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));

CREATE SEARCH INDEX albumstitleindex ON albums(albumtitle_tokens);

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

GoogleSQL

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

PostgreSQL

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

SELECT albumid
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 troubled wate לא
    Bridge over Troubled Water trouble water לא
    Bridge over Troubled Water גשר לא
  • word_prefix: כמו value_prefix, אבל המחרוזת צריכה להתאים לגבול של מונח (ולא לגבול של ערך).

    דוגמאות

    טקסט שמור שאילתת מחרוזת משנה התאמה
    Bridge over Troubled Water over trouble כן
    Bridge over Troubled Water מעל , בעיות כן
    Bridge over Troubled 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 לא

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