Volltextsuche mit Spanner Graph verwenden

Auf dieser Seite wird beschrieben, wie Sie die Volltextsuche in Spanner Graph verwenden.

Spanner Graph kombiniert Graph- und Volltextsuche in einem System. So lassen sich Erkenntnisse aus unstrukturierten Daten in Verbindung mit Beziehungen im Graphen gewinnen.

Hinweise

Wenn Sie die Beispiele auf dieser Seite ausführen möchten, müssen Sie Spanner-Graphen mit der Google Cloud Console einrichten und abfragen. Mit diesen Verfahren wird Folgendes erreicht:

  1. Erstellen Sie eine Instanz.
  2. Erstellen Sie eine Datenbank.
  3. Erstellen Sie ein Schema für Ihre Spanner-Graphdatenbank.
  4. Diagrammdaten einfügen

Tokens und Suchindexe erstellen

Der erste Schritt zur Verwendung der Volltextsuche besteht darin, die Inhalte zu tokenisieren, in denen gesucht werden soll, und einen Suchindex zu erstellen. Bei der Volltextsuche werden Abfragen an den Suchindex gesendet.

Im folgenden Beispiel wird die Spalte nick_name_token hinzugefügt und der Text in der Spalte Account.nick_name mit der Funktion TOKENIZE_FULLTEXT tokenisiert. Als Nächstes wird der Suchindex für die Spalte nick_name_token erstellt.

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

Im folgenden Beispiel wird die Funktion TOKENIZE_FULLTEXT verwendet, um den Text in Account.nick_name zu tokenisieren. Anschließend wird ein Suchindex für die Spalte nick_name_token erstellt, die die Tokens enthält.

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

Da Account und AccountTransferAccount einige neue Spalten hinzugefügt wurden und Sie in Suchfunktionen auf sie als neue Graph-Attribute zugreifen, müssen Sie die Property-Graph-Definition mit der folgenden Anweisung aktualisieren. Weitere Informationen finden Sie unter Vorhandene Knoten- oder Kantendefinitionen aktualisieren.

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

Sie können jetzt die Volltextsuche für Ihre Diagrammdaten verwenden.

Eigenschaft „Suchgraph-Knoten“

In diesem Beispiel wird gezeigt, wie Sie nach Knoten im Graphen suchen und ihre Beziehungen untersuchen.

  1. Aktualisieren Sie Account.nick_name mit einigen Nachrichten.

    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. Verwenden Sie die Funktion SEARCH, um Account-Knoten im Diagramm zu finden, deren nick_name entweder „Regentag“ ODER „Urlaub“ enthält. Verwenden Sie die Graphendurchquerung, um den Geldbetrag zu ermitteln, der in diese Konten überwiesen wurde. Bewerten Sie die Übereinstimmungen nach Suchrelevanz. Die Ergebnisse werden in absteigender Relevanz sortiert und zurückgegeben. Sie können die Disjunktion von Tokens im selben Aufruf der Suchfunktion suchen.

    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
    

    Ergebnis:

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

Suchgraph-Kanteneigenschaft

In diesem Beispiel wird gezeigt, wie Sie nach bestimmten Kanten im Graphen suchen.

  1. Aktualisieren Sie AccountTransferAccount.notes per SMS.

    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. Verwenden Sie die Volltextsuche, um Kanten für Umstiege zu finden, die „Fahrt“ enthalten. Mithilfe der Graphendurchquerung können Sie die Quell- und Zielknoten dieser Übertragungen ermitteln.

    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
    

    Ergebnis:

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

Die Suchfunktion hat das erste Ergebnis trotz der HTML-Tags im Text korrekt abgerufen.

Nächste Schritte