Usar a pesquisa de texto completo com o Spanner Graph

Esta página descreve como usar a pesquisa de texto completo no Spanner Graph.

O Spanner Graph combina gráficos e pesquisa de texto completo em um único sistema. Essa combinação permite extrair insights de dados não estruturados em conjunto com as relações no gráfico.

Antes de começar

Para executar os exemplos desta página, você precisa executar a configuração e consultar o Spanner Graph usando os procedimentos do console do Google Cloud . Esses procedimentos fazem o seguinte:

  1. Crie uma instância.
  2. Crie um banco de dados.
  3. Crie um esquema para o banco de dados do Spanner Graph.
  4. Inserir dados do gráfico.

Criar tokens e índices de pesquisa

A primeira etapa para usar a pesquisa de texto completo é tokenizar o conteúdo que você quer pesquisar e criar um índice de pesquisa. A pesquisa de texto completo executa consultas no índice de pesquisa.

O exemplo a seguir adiciona a coluna nick_name_token e usa a função TOKENIZE_FULLTEXT para tokenizar o texto na coluna Account.nick_name. Em seguida, o índice de pesquisa é criado na coluna 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);

O exemplo a seguir usa a função TOKENIZE_FULLTEXT para tokenizar o texto em Account.nick_name e criar um índice de pesquisa na coluna nick_name_token que contém os tokens.

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

Como algumas colunas foram adicionadas a Account e AccountTransferAccount, e você as acessa como novas propriedades de gráfico nas funções de pesquisa, é necessário atualizar a definição do gráfico de propriedade usando a seguinte instrução (explicada em atualizar definições de nó ou aresta).

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

Agora você pode usar a pesquisa de texto completo nos dados do gráfico.

Pesquisar propriedade do nó do gráfico

Este exemplo mostra como pesquisar nós no gráfico e analisar as relacionamentos deles.

  1. Atualize Account.nick_name com algumas mensagens de texto.

    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. Use a função SEARCH para encontrar nós Account no gráfico que tenham "dia chuvoso" OU "férias" no nick_name. Use a travessia de gráfico para encontrar a quantidade de dinheiro que foi transferido para essas contas. Pontue as correspondências pela relevância da pesquisa. Ordene e retorne os resultados em ordem de relevância decrescente. É possível procurar a disjunção de tokens na mesma chamada de função de pesquisa.

    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
    

    Resultado:

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

Propriedade de aresta do gráfico de pesquisa

Este exemplo mostra como pesquisar arestas específicas no gráfico

  1. Atualize AccountTransferAccount.notes com uma mensagem de texto.

    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. Use a pesquisa de texto completo para encontrar as arestas de transferência que contêm "trip". Use a travessia de gráfico para encontrar os nós de origem e destino dessas transferências.

    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
    

    Resultado:

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

A função de pesquisa recuperou corretamente o primeiro resultado, apesar das tags HTML no texto.

A seguir