Búsqueda de texto completosolo PostgreSQL

TO_TSVECTOR

Prepara un texto para la búsqueda de texto completo: lo divide en palabras y las reduce a su raíz.

Sintaxis

TO_TSVECTOR('<configuración de idioma>', <texto>)
<tsvector> @@ <tsquery>

Convierte un texto en un tsvector: un conjunto de raíces de palabras con sus posiciones. Una configuración de idioma como 'english' descarta las palabras vacías (the, are) y reduce las formas de una palabra a su raíz: foxes pasa a ser fox, y running, run. Se busca en él con el operador @@ junto con TO_TSQUERY. No todos los idiomas tienen una configuración incorporada: para ellos se usa 'simple' o una extensión.

Un texto convertido en un conjunto de raíces
SELECT TO_TSVECTOR('english', 'The quick brown foxes are running') AS document;
document
'brown':3 'fox':4 'quick':2 'run':6

Los números son las posiciones de las palabras en el texto. Las palabras vacías The y are han desaparecido.

Comprobar una coincidencia
SELECT TO_TSVECTOR('english', 'The foxes are running') @@ TO_TSQUERY('english', 'run') AS found;
found
true

La palabra run no está en el texto, pero running se reduce a la misma raíz.

La configuración simple, sin raíces
SELECT TO_TSVECTOR('simple', 'The foxes are running') AS simple_config;
simple_config
'are':3 'foxes':2 'running':4 'the':1

'simple' solo pasa a minúsculas: no se descarta ni se acorta ninguna palabra.

Ten en cuenta

Sin configuración de idioma se usa la del servidor, y el resultado puede variar de un servidor a otro. Indica siempre el idioma de forma explícita.

Las palabras vacías desaparecen por completo: con 'english', buscar the no encuentra nada, ni siquiera donde la palabra está.

Calcular TO_TSVECTOR al vuelo sobre una tabla grande es lento. Para buscar rápido, se guarda un tsvector ya preparado en una columna con un índice GIN.

Funciones relacionadas

Más detalles en el curso