En esta página, se describe cómo agregar la asignación de token a las tablas. La asignación de token es necesario para crear los tokens que se usarán en el índice de búsqueda.
Descripción general
La tokenización es el proceso de transformar valores en tokens. El método con el que usar para asignar tokens a un documento determina los tipos y la eficiencia de las búsquedas que los usuarios pueden realizar en él.
Spanner proporciona analizadores para texto en lenguaje natural, subcadenas, texto literal, números y valores booleanos. El esquema de la base de datos usa el analizador que coincide con el tipo de búsqueda necesario para la columna. Tokenizadores tienen las siguientes características:
- Cada tokenizador es una función de SQL que obtiene una entrada, como una cadena o un y argumentos con nombre para opciones adicionales.
- El tokenizador genera una
TOKENLIST
.
Por ejemplo, una cadena de texto The quick brown fox jumps over the lazy dog
se asigna un token a [the,quick,brown,fox,jumps,over,the,lazy,dog]
.
Se asigna un token a una cadena HTML The <b>apple</b> is <i>red</i>
en
[the,apple,is,red]
Los tokens tienen las siguientes características:
- Los tokens se almacenan en columnas que usan el tipo de datos
TOKENLIST
. - Cada token se almacena como una secuencia de bytes, con un conjunto opcional de atributos asociados. Por ejemplo, en aplicaciones de texto completo, un token se por lo general, una sola palabra de un documento de texto.
- Cuando se asignan tokens a valores HTML, Spanner genera atributos que indican la importancia de un token dentro del documento. Spanner usa estos atributos para que la puntuación aumente más términos destacados (como un encabezado).
Tokenizadores
Spanner admite las siguientes funciones del tokenizador:
Tokenizador de texto completo (
TOKENIZE_FULLTEXT
) produce tokens de palabras completas para consultas en lenguaje natural.Ejemplo
Las siguientes funciones
TOKENIZE_FULLTEXT("Yellow apple") TOKENIZE_FULLTEXT("Yellow <b>apple</b>", content_type=>"text/html")
produce los mismos tokens:
[yellow,apple]
.Tokenizador de subcadenas (
TOKENIZE_SUBSTRING
) genera tokens para cada n-grama de cada palabra. Se usa para buscar subcadenas de palabras en un texto.Ejemplo
TOKENIZE_SUBSTRING("hello world", ngram_size_min=>4, ngram_size_max=>6)
Produce los siguientes tokens:
[ello,hell,hello,orld,worl,world]
.Tokenizador de n-grama (
TOKENIZE_NGRAMS
) genera n-gramas a partir de una entrada (sin dividirla en palabras separadas). Se usa para acelerar predicados de expresiones regulares.Ejemplo
La siguiente función:
TOKENIZE_NGRAMS("Big Time", ngram_size_min=>4, ngram_size_max=>4)
Produce los siguientes tokens:
["Big ","ig T","g Ti"," Tim", "Time"]
.Tokenizadores de concordancia exacta (
TOKEN
) yTOKENIZE_BOOL
) se usan para buscar filas que contengan un valor determinado en una de sus columnas. Por ejemplo, una aplicación que indexa un catálogo de productos podría querer buscar productos de una marca y un color determinados.Ejemplos
Las siguientes funciones:
TOKEN("hello") TOKEN(["hello", "world"])
Produce los siguientes tokens, respectivamente:
[hello]
y[hello,world]
.La siguiente función:
TOKENIZE_BOOL(true)
Produce el siguiente token:
[y]
.Tokenizadores de números (
TOKENIZE_NUMBER
) se usan para generar un conjunto de tokens que aceleran la comparación numérica búsquedas. En el caso de las condiciones de igualdad, el token es el mismo número. Para rango condiciones (comorating >= 3.5
), el conjunto de tokens es más elaborado.Ejemplos
Las siguientes declaraciones de función:
TOKENIZE_NUMBER(42, comparison_type=>"equality") TOKENIZE_NUMBER(42, comparison_type=>"all", granularity=>10, min=>1, max=>100)
Produce los siguientes tokens, respectivamente:
"==42"
y"==42"
."[1,75]"
,"[36, 45]"
,"[36,55]"
y"[36, 75]"
.
Las funciones de asignación de token suelen usarse en un
columna generada. Estos
las columnas se definen como HIDDEN
para que no se incluyan en SELECT *
en los resultados de la consulta.
En el siguiente ejemplo, se usan un tokenizador de texto completo y uno numérico para crear una base de datos que almacene los nombres y las calificaciones de los álbumes de música. El enunciado DDL hace dos cosas:
- Define las columnas de datos
AlbumTitle
yRating
. Define
AlbumTitle_Tokens
yAlbumRating_Tokens
. EstosTOKENLIST
las columnas asignan tokens a los valores en las columnas de datos para que Spanner puede indexarlos.CREATE TABLE Albums ( AlbumId STRING(MAX) NOT NULL, AlbumTitle STRING(MAX), Rating FLOAT64, AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(AlbumTitle)) HIDDEN, Rating_Tokens TOKENLIST AS (TOKENIZE_NUMBER(Rating)) HIDDEN ) PRIMARY KEY(AlbumId);
Cada vez que se modifican los valores base, AlbumTitle_Tokens
y Rating_Tokens
.
se actualizan automáticamente.
Asigna tokens al texto sin formato o al contenido HTML
La tokenización de texto admite tipos de contenido de texto sin formato y HTML. Usa el
Spanner TOKENIZE_FULLTEXT
para crear tokens. Luego, usa
CREATE SEARCH INDEX
Declaración DDL para generar el índice de búsqueda.
Por ejemplo, la siguiente declaración DDL CREATE TABLE
usa el elemento
Función TOKENIZE_FULLTEXT
para crear tokens a partir de AlbumTitles
en el
Albums
. La declaración DDL CREATE SEARCH INDEX
crea una búsqueda
índice con el nuevo AlbumTitles_Tokens
.
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(AlbumTitle_Tokens)
El proceso de asignación de token usa las siguientes reglas:
- La asignación de token no incluye letración o corrección de palabras mal escritas. Por ejemplo, en una oración como “Un gato estaba mirando a grupo de gatos”, el token “gato” se indexa por separado del token "cats". En comparación con otros motores de búsqueda que normalizan los tokens durante las operaciones de escritura, Spanner proporciona una opción para expandir la búsqueda a incluir diferentes formas de palabras. Para obtener más información, consulta Modo de consulta mejorado.
- Las palabras de parada (como "a") se incluyen en el índice de búsqueda.
- La búsqueda en el texto completo siempre distingue entre mayúsculas y minúsculas. El proceso de asignación de token convierte todos los tokens en minúsculas.
El proceso de asignación de token realiza un seguimiento de las posiciones para cada token en el original texto. Estas posiciones se usan luego para hacer coincidir frases. Las posiciones se almacenan en el índice de búsqueda junto con los documentos.
Google continúa mejorando los algoritmos de asignación de token. En algunos casos, esto podría hacer que una cadena se segmente de manera diferente en el futuro de la forma en que se segmenta ahora. Esperamos que estos casos sean extremadamente raros. Un ejemplo de esto es si hay una mejora en el idioma chino, japonés y coreano (CJK) la segmentación de clientes.
El argumento content_type
especifica si el formato del contenido usa texto
texto o HTML. Usa la siguiente configuración para establecer content_type
:
- Para la asignación de token de texto, establece el argumento
content_type
en "text/plain
". Esta es la configuración predeterminada. - Para la asignación de token HTML, establece el argumento
content_type
en"text/html
. Sin este argumento, las etiquetas HTML se tratan como puntuación. En el modo HTML, Spanner usa heurísticas para inferir qué tan destacado es el texto en la página. Por ejemplo, si el texto está en un encabezado o en el tamaño de fuente. Entre los atributos admitidos para HTML, se incluyensmall
,medium
,large
,title
y `link'. Al igual que en la posición, el atributo se almacena junto con el token en el índice de búsqueda. La asignación de token no crea tokens para ningún HTML rótulos nuevos rápidamente.
Los atributos del token no afectan la coincidencia ni los resultados de SEARCH
o
Función SEARCH_SUBSTRING
. Solo se usan para
clasificación.
En el siguiente ejemplo, se muestra cómo realizar la asignación de token de texto:
CREATE TABLE T (
...
Text STRING(MAX),
Html STRING(MAX),
Text_Tokens TOKENLIST
AS (TOKENIZE_FULLTEXT(Text, content_type=>"text/plain")) HIDDEN,
Html_Tokens TOKENLIST
AS (TOKENIZE_FULLTEXT(Html, content_type=>"text/html")) HIDDEN
) PRIMARY KEY(...);
Mejora de la detección de idioma con el argumento language_tag
La asignación de token detecta el idioma de entrada automáticamente, de forma predeterminada. Cuando
idioma de entrada, se puede usar un argumento language_tag
para
definir mejor este comportamiento:
AlbumTitle_Tokens TOKENLIST
AS (TOKENIZE_FULLTEXT(AlbumTitle, language_tag=>"en-us")) HIDDEN
La mayoría de las aplicaciones dejan el argumento language_tag
sin especificar y, en su lugar, dependen
sobre la detección automática de idioma. La segmentación de idiomas asiáticos,
como el chino,
En coreano y japonés, no es necesario configurar el lenguaje de asignación de token.
En los siguientes ejemplos, se muestran casos en los que language_tag
afecta la asignación de token:
Función de asignación de token | Tokens producidos |
---|---|
TOKENIZE_FULLTEXT("A tout pourquoi il y a un parce que") |
[a, tout, pourquoi, il, ya, un, parce, que] |
TOKENIZE_FULLTEXT("A tout pourquoi il y a un parce que", \ language_tag=>"fr" |
[a, tout, pourquoi, il, y, a, un, parce, que] |
TOKENIZE_FULLTEXT("旅 行") |
Dos tokens: [旅, tabs] |
TOKENIZE_FULLTEXT("旅 行", language_tag=>"zh") |
Un token: [旅] |
¿Qué sigue?
- Obtén más información sobre los índices de búsqueda.
- Obtén más información sobre los índices numéricos.
- Obtén más información sobre la partición de índices.