Utiliser la recherche en texte intégral avec Spanner Graph

Cette page explique comment utiliser la recherche en texte intégral dans Spanner Graph.

Spanner Graph combine la recherche de graphes et la recherche en texte intégral dans un même système. Cette combinaison vous permet d'obtenir des insights à partir de données non structurées en plus des relations dans le graphique.

Avant de commencer

Pour exécuter les exemples de cette page, vous devez configurer et interroger le graphique Spanner à l'aide de la console Google Cloud . Ces procédures permettent d'effectuer les opérations suivantes:

  1. Créez une instance.
  2. Créez une base de données.
  3. Créez un schéma pour votre base de données Spanner Graph.
  4. Insérez les données du graphique.

Créer des jetons et des index de recherche

La première étape pour utiliser la recherche de texte intégral consiste à tokeniser le contenu sur lequel vous souhaitez effectuer des recherches et à créer un index de recherche. La recherche en texte intégral exécute des requêtes sur l'index de recherche.

L'exemple suivant ajoute la colonne nick_name_token et utilise la fonction TOKENIZE_FULLTEXT pour tokenizer le texte dans la colonne Account.nick_name. Ensuite, l'index de recherche est créé dans la colonne 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);

L'exemple suivant utilise la fonction TOKENIZE_FULLTEXT pour tokenizer le texte dans Account.nick_name et crée un indice de recherche sur la colonne nick_name_token contenant les jetons.

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

Étant donné que de nouvelles colonnes ont été ajoutées à Account et AccountTransferAccount et que vous y accédez en tant que nouvelles propriétés de graphique dans les fonctions de recherche, vous devez mettre à jour la définition du graphique de la propriété à l'aide de l'instruction suivante (voir la section Mettre à jour les définitions de nœud ou d'arc existantes pour en savoir plus).

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

Vous pouvez désormais utiliser la recherche en texte intégral sur vos données de graphiques.

Propriété de nœud du graphique de recherche

Cet exemple vous montre comment rechercher des nœuds dans le graphique et explorer leurs relations.

  1. Mettez à jour Account.nick_name avec quelques messages texte.

    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. Utilisez la fonction SEARCH pour trouver les nœuds Account du graphique qui contiennent "jour de pluie" OU "vacances" dans leur nick_name. Utilisez l'exploration de graphes pour déterminer le montant d'argent transféré dans ces comptes. Évaluez les correspondances en fonction de leur pertinence dans la recherche. Triez et renvoyez les résultats par ordre décroissant de pertinence. Notez que vous pouvez rechercher la disjonction de jetons dans le même appel de fonction de recherche.

    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
    

    Résultat :

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

Propriété de l'arête du graphique de recherche

Cet exemple vous montre comment rechercher des arêtes spécifiques dans le graphique.

  1. Mettez à jour AccountTransferAccount.notes avec un message texte.

    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. Utilisez la recherche dans le texte intégral pour trouver les arêtes de transfert contenant "voyage". Utilisez l'exploration de graphes pour trouver les nœuds source et de destination de ces transferts.

    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
    

    Résultat :

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

La fonction de recherche a correctement rappelé le premier résultat malgré les balises HTML dans le texte.

Étape suivante