שימוש בחיפוש טקסט מלא ב-Spanner Graph

בדף הזה מוסבר איך להשתמש בחיפוש טקסט מלא ב-Spanner Graph.

‫Spanner Graph משלב בין גרף לבין חיפוש טקסט מלא במערכת אחת. השילוב הזה מאפשר להפיק תובנות מנתונים לא מובנים בשילוב עם קשרים בתרשים.

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

כדי להריץ את הדוגמאות בדף הזה, צריך לבצע את הפעולות שבקטע הגדרה של Spanner Graph והרצת שאילתות באמצעות מסוף Google Cloud . הפעולות הבאות מתבצעות בתהליכים האלה:

  1. יצירת מופע
  2. יצירת מסד נתונים.
  3. יצירת סכימה למסד נתונים של Spanner Graph.
  4. הוספת נתוני תרשים.

יצירת טוקנים ומדדי חיפוש

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

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

ALTER TABLE Account
ADD COLUMN nick_name_token TOKENLIST
AS (TOKENIZE_FULLTEXT(nick_name)) STORED HIDDEN;

CREATE SEARCH INDEX AccountTextSearchIndex
ON Account(nick_name_token) STORING (nick_name);

בדוגמה הבאה נעשה שימוש בפונקציה TOKENIZE_FULLTEXT כדי ליצור טוקניזציה של הטקסט ב-Account.nick_name, ונוצר אינדקס חיפוש בעמודה nick_name_token שמכילה את הטוקנים.

ALTER TABLE AccountTransferAccount
ADD COLUMN notes STRING(MAX);
ALTER TABLE AccountTransferAccount
ADD COLUMN notes_token TOKENLIST AS (TOKENIZE_FULLTEXT(notes)) STORED HIDDEN;

CREATE SEARCH INDEX TransferTextSearchIndex
ON AccountTransferAccount(notes_token) STORING (notes);

מאחר שנוספו כמה עמודות חדשות ל-Account ול-AccountTransferAccount ואתם ניגשים אליהן כמאפיינים חדשים של גרף בפונקציות חיפוש, אתם צריכים לעדכן את ההגדרה של גרף המאפיינים באמצעות ההצהרה הבאה (הסבר נוסף זמין במאמר עדכון הגדרות קיימות של צמתים או קשתות).

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (Account, Person)
  EDGE TABLES (
    PersonOwnAccount
      SOURCE KEY (id) REFERENCES Person (id)
      DESTINATION KEY (account_id) REFERENCES Account (id)
      LABEL Owns,
    AccountTransferAccount
      SOURCE KEY (id) REFERENCES Account (id)
      DESTINATION KEY (to_id) REFERENCES Account (id)
      LABEL Transfers
  );

עכשיו אפשר להשתמש בחיפוש טקסט מלא בנתוני הגרף.

מאפיין של צומת בתרשים החיפוש

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

  1. מעדכנים את Account.nick_name עם כמה הודעות טקסט.

    UPDATE Account SET nick_name = "Fund for vacation at the north pole" WHERE id = 7;
    UPDATE Account SET nick_name = "Fund -- thrill rides!" WHERE id = 16;
    UPDATE Account SET nick_name = "Rainy day fund for the things I still want to do" WHERE id = 20;
    
  2. משתמשים בפונקציה SEARCH כדי למצוא צמתי Account בתרשים שכוללים את הערך rainy day או vacation ב-nick_name שלהם. אפשר להשתמש בחיפוש גרפים כדי למצוא את סכום הכסף שהועבר לחשבונות האלה. לדרג את ההתאמות לפי הרלוונטיות לחיפוש. מיון התוצאות והחזרתן בסדר יורד של רלוונטיות. שימו לב שאפשר לחפש את הפירוק של טוקנים באותה בקשה להפעלת פונקציית חיפוש.

    GRAPH FinGraph
    MATCH (n:Account)<-[e:Transfers]-(:Account)
    WHERE SEARCH(n.nick_name_token, '"rainy day" | vacation')
    RETURN n.nick_name, e.amount AS amount_added
    ORDER BY SCORE(n.nick_name_token, '"rainy day" | vacation') DESC
    

    תוצאה:

    nick_name                                             amount_added
    Rainy day fund for the things I still want to do      300
    Fund for vacation at the north pole                   500
    

מאפיין קצה של גרף חיפוש

בדוגמה הזו מוסבר איך לחפש קשתות ספציפיות בגרף

  1. עדכון של AccountTransferAccount.notes באמצעות הודעת טקסט.

    UPDATE AccountTransferAccount SET notes = 'for trip fund'
    WHERE id = 16 AND to_id = 20;
    UPDATE AccountTransferAccount SET notes = '&lt;trip&#39;s very fun!&gt;'
    WHERE id = 20 AND to_id = 7;
    UPDATE AccountTransferAccount SET notes = 'book fee'
    WHERE id = 20 AND to_id = 16;
    
  2. משתמשים בחיפוש טקסט מלא כדי למצוא קצוות של העברות שמכילים את המילה trip (נסיעה). אפשר להשתמש בגרף כדי למצוא את צמתי המקור והיעד של ההעברות האלה.

    GRAPH FinGraph
    MATCH (a:Account)-[e:Transfers WHERE SEARCH(e.notes_token, 'trip')]->(b:Account)
    RETURN a.id AS src_id, b.id AS dst_id, e.notes
    

    תוצאה:

    src_id  dst_id  notes
    
    20      7      &lt;trip&#39;s very fun!&gt;
    16      20     for trip fund
    

פונקציית החיפוש זיהתה נכון את התוצאה הראשונה למרות תגי ה-HTML בטקסט.

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