Usa la búsqueda en el texto completo con Spanner Graph

En esta página, se describe cómo usar la búsqueda en el texto completo en Spanner Graph.

Spanner Graph combina la búsqueda de gráficos y de texto completo en un solo sistema. Esta combinación te permite obtener estadísticas a partir de datos no estructurados junto con las relaciones en el gráfico.

Antes de comenzar

Para ejecutar los ejemplos de esta página, debes realizar los procedimientos para configurar y consultar Spanner Graph con la consola de Google Cloud . Estos procedimientos hacen lo siguiente:

  1. Crea una instancia.
  2. Crea una base de datos.
  3. Crea un esquema para tu base de datos de Spanner Graph.
  4. Inserta datos de gráficos.

Crea tokens y índices de búsqueda

El primer paso para usar la búsqueda en el texto completo es tokenizar el contenido en el que deseas realizar la búsqueda y crear un índice de búsqueda. La búsqueda en el texto completo ejecuta consultas en el índice de búsqueda.

En el siguiente ejemplo, se agrega la columna nick_name_token y se usa la función TOKENIZE_FULLTEXT para tokenizar el texto en la columna Account.nick_name. A continuación, se crea el índice de búsqueda en la columna 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);

En el siguiente ejemplo, se usa la función TOKENIZE_FULLTEXT para tokenizar el texto en Account.nick_name y crear un índice de búsqueda en la columna nick_name_token que contiene los 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);

Dado que se agregaron algunas columnas nuevas a Account y AccountTransferAccount, y accedes a ellas como propiedades de gráfico nuevas en las funciones de búsqueda, debes actualizar la definición del gráfico de propiedades con la siguiente sentencia (se explica con más detalle en Cómo actualizar definiciones de nodos o aristas existentes).

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

Ahora puedes usar la búsqueda en el texto completo en tus datos de gráficos.

Propiedad del nodo del gráfico de búsqueda

En este ejemplo, se muestra cómo buscar nodos en el grafo y explorar sus relaciones.

  1. Actualiza Account.nick_name con algunos mensajes 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. Usa la función SEARCH para encontrar nodos Account en el gráfico que tengan “día lluvioso” O “vacaciones” en su nick_name. Usa el recorrido de gráfico para encontrar la cantidad de dinero que se transfirió a esas cuentas. Califica las coincidencias según la relevancia de la búsqueda. Ordena y muestra los resultados en orden de relevancia descendente. Ten en cuenta que puedes buscar la disyunción de tokens en la misma llamada a la función de búsqueda.

    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
    

Propiedad de borde del gráfico de búsqueda

En este ejemplo, se muestra cómo buscar aristas específicas en el gráfico.

  1. Actualiza AccountTransferAccount.notes con un mensaje 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. Usa la búsqueda de texto completo para encontrar aristas de transferencias que contengan "viaje". Usa el recorrido de gráfico para encontrar los nodos de origen y destino de esas transferencias.

    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
    

La función de búsqueda recordó correctamente el primer resultado a pesar de las etiquetas HTML en el texto.

¿Qué sigue?