Utilizzare la ricerca a testo intero con Spanner Graph

Questa pagina descrive come utilizzare la ricerca a testo intero in Spanner Graph.

Spanner Graph combina la ricerca di grafi e a testo intero in un unico sistema. Questa combinazione ti consente di ricavare informazioni strategiche dai dati non strutturati in combinazione con le relazioni nel grafico.

Prima di iniziare

Per eseguire gli esempi in questa pagina, devi eseguire le procedure di configurazione e query di Spanner Graph utilizzando la console Google Cloud . Queste procedure svolgono le seguenti operazioni:

  1. Crea un'istanza.
  2. Crea un database.
  3. Crea uno schema per il tuo database Spanner Graph.
  4. Inserisci i dati del grafico.

Crea token e indici di ricerca

Il primo passaggio per utilizzare la ricerca a testo intero è tokenizzare i contenuti in base ai quali vuoi eseguire la ricerca e creare un indice di ricerca. La ricerca a testo intero esegue query sull'indice di ricerca.

L'esempio seguente aggiunge la colonna nick_name_token e utilizza la funzione TOKENIZE_FULLTEXT per tokenizzare il testo nella colonna Account.nick_name. Successivamente, viene creato l'indice di ricerca nella colonna 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'esempio seguente utilizza la funzione TOKENIZE_FULLTEXT per tokenizzare il testo in Account.nick_name e crea un indice di ricerca nella colonna nick_name_token contenente i 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);

Poiché sono state aggiunte alcune nuove colonne a Account e AccountTransferAccount e accedo a queste come nuove proprietà del grafo nelle funzioni di ricerca, devi aggiornare la definizione del grafo delle proprietà utilizzando la seguente dichiarazione (maggiori dettagli sono disponibili in Aggiornare le definizioni di nodi o archi esistenti).

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

Ora puoi utilizzare la ricerca full-text sui dati del grafico.

Proprietà del nodo del grafico di ricerca

Questo esempio mostra come cercare i nodi nel grafico ed esplorare le relative relazioni.

  1. Aggiorna Account.nick_name con alcuni messaggi.

    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. Utilizza la funzione SEARCH per trovare i nodi Account nel grafo che contengono "giorno di pioggia" OPPURE "vacanza" nel nick_name. Utilizza la traversata del grafo per trovare l'importo trasferito in questi account. Assegna un punteggio alle corrispondenze in base alla pertinenza per la ricerca. Ordina e restituisci i risultati in ordine decrescente di pertinenza. Tieni presente che puoi cercare la disgiunzione di token nella stessa chiamata della funzione di ricerca.

    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
    

    Risultato:

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

Proprietà dell'elemento del grafico di ricerca

Questo esempio mostra come cercare archi specifici nel grafico

  1. Aggiorna AccountTransferAccount.notes con un messaggio.

    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. Utilizza la ricerca full-text per trovare gli spigoli Trasferimenti che contengono "viaggio". Utilizza la traversale del grafico per trovare i nodi di origine e di destinazione di questi trasferimenti.

    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
    

    Risultato:

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

La funzione di ricerca ha richiamato correttamente il primo risultato nonostante i tag HTML nel testo.

Passaggi successivi