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:
- Créez une instance.
- Créez une base de données.
- Créez un schéma pour votre base de données Spanner Graph.
- 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.
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;
Utilisez la fonction
SEARCH
pour trouver les nœudsAccount
du graphique qui contiennent "jour de pluie" OU "vacances" dans leurnick_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.
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 = '<trip's very fun!>' WHERE id = 20 AND to_id = 7; UPDATE AccountTransferAccount SET notes = 'book fee' WHERE id = 20 AND to_id = 16;
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 <trip's very fun!> 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
- En savoir plus sur les requêtes Spanner Graph
- En savoir plus sur la recherche en texte intégral
- En savoir plus sur les requêtes de recherche en texte intégral