Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La lakebase_tokenizer extensión añade tokenización configurable de palabra completa a la búsqueda de texto completo de PostgreSQL en Lakebase. Las configuraciones de búsqueda de texto construidas con la extensión trabajan con to_tsvector, el @@ operador, funciones de clasificación y índices GIN. También puedes usar valores generados tsvector con lakebase_text para el ranking de BM25.
La extensión proporciona la tokenizer_wholeword plantilla a través de la interfaz estándar de diccionario de búsqueda de texto de PostgreSQL. La plantilla soporta conversión en minúsculas, normalización Unicode, eliminación de acentos, eliminación posesiva inglesa, palabras de oclusión, sinónimos uno a uno y stemming en inglés.
Install
Instala la extensión en tu base de datos. Los ejemplos de esta página utilizan un esquema dedicado para facilitar la identificación de los objetos de extensión:
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;
La ampliación es trasladable. Puedes reemplazarlo tokenizer_ext por otro esquema cuando lo instales.
Actualización de la extensión
Una nueva versión de Lakebase Search puede añadir funciones, correcciones y mejoras de rendimiento. PostgreSQL no actualiza automáticamente la versión instalada de la extensión. Consulta las versiones instaladas y las últimas disponibles:
SELECT installed_version, default_version
FROM pg_available_extensions
WHERE name = 'lakebase_tokenizer';
Actualizar la extensión a la última versión disponible:
ALTER EXTENSION lakebase_tokenizer UPDATE;
ALTER EXTENSION no regenera los valores almacenados tsvector ni reconstruye GIN o lakebase_bm25 índices dependientes. Si una actualización modifica la salida de tokenización, regenera los valores almacenados tsvector y sigue las notas de lanzamiento para cualquier mantenimiento de índice necesario.
Inicio rápido con tokenizer_wholeword
El siguiente ejemplo crea un diccionario a partir de la tokenizer_wholeword plantilla y luego mapea los tipos comunes de tokens PostgreSQL a él en una configuración de búsqueda de texto:
CREATE TEXT SEARCH DICTIONARY documents_dict (
TEMPLATE = tokenizer_ext.tokenizer_wholeword,
Lowercase = 'true',
StripAccents = 'true',
Stemmer = 'english'
);
CREATE TEXT SEARCH CONFIGURATION documents_cfg (COPY = pg_catalog.simple);
ALTER TEXT SEARCH CONFIGURATION documents_cfg
ALTER MAPPING FOR asciiword, word, numword, hword_numpart, hword_part, hword_asciipart
WITH documents_dict;
Utiliza la configuración para producir un tsvector, crea un índice GIN y ejecuta consultas en texto completo:
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
body TEXT NOT NULL,
search_vector TSVECTOR GENERATED ALWAYS AS (
to_tsvector('documents_cfg', body)
) STORED
);
INSERT INTO documents (body) VALUES
('Cats are running near the café.'),
('A dog is sleeping in the house.');
CREATE INDEX documents_search_idx ON documents USING gin (search_vector);
SELECT id, body
FROM documents
WHERE search_vector @@ plainto_tsquery('documents_cfg', 'running café');
Utiliza la misma configuración de búsqueda de texto para documentos y consultas, de modo que ambas partes apliquen la misma estrategia y opciones de tokenización.
Plantilla: tokenizer_wholeword
Cómo funciona
Para cada token pasado al diccionario por el analizador de búsqueda de texto de PostgreSQL, tokenizer_wholeword se aplican estas operaciones:
-
Lowercase: Convierte la ficha a minúscula. -
Normalize: Aplicar la normalización Unicode. -
StripAccents: Quita los acentos. -
EnglishPossessive: Eliminar un sufijo posesivo inglés cuando queda al menos un carácter. -
Stopwords: No emitir lexema y detener el procesamiento si el token coincide con una palabra de parada configurada. El token se omite del archivo generadotsvector. -
Synonyms: Emite el reemplazo configurado y detiene el procesamiento si el token coincide con un sinónimo. -
Stemmer: Si no se asocia sinónimo y se habilita el stemming, aplica el stemmer en inglés.
Añadir palabras clave y sinónimos
La tokenizer_wholeword plantilla puede cargar palabras de parada y sinónimos personalizados a partir de tablas lakebase_tokenizer_stopwords SQL gestionadas por extensiones y lakebase_tokenizer_synonyms. La name columna agrupa las filas en un conjunto que seleccionas con la Stopwords opción de diccionario o Synonyms .
INSERT INTO tokenizer_ext.lakebase_tokenizer_stopwords (name, word) VALUES
('app_stopwords', 'the'),
('app_stopwords', 'and'),
('app_stopwords', 'or');
INSERT INTO tokenizer_ext.lakebase_tokenizer_synonyms (name, word, synonym) VALUES
('app_synonyms', 'usa', 'united_states'),
('app_synonyms', 'uk', 'united_kingdom');
Consulta los conjuntos cuando crees o modifiques un tokenizer_wholeword diccionario:
ALTER TEXT SEARCH DICTIONARY documents_dict (
Stopwords = 'app_stopwords',
Synonyms = 'app_synonyms'
);
La extensión compara las palabras de oclusiva y las palabras fuente sinónimo con cada token después de aplicar , , , y EnglishPossessive, pero antes de aplicar Stemmer. StripAccentsNormalizeLowercase Las entradas del catálogo no se transforman automáticamente, así que guárdalas en la forma exacta que producen esas opciones habilitadas:
- Con
Lowercase = 'true', usa entradas minúsculas. ConLowercase = 'false', la mayúscula debe coincidir con la ficha. - Con
Normalizeactivado, almacena las entradas en el formulario seleccionado de normalización Unicode. - Con , guarda
StripAccents = 'true'la forma con acento. Por ejemplo, almacenacafepara que coincidacafécon . - Guarda el formulario antes de despedazar. Por ejemplo, con
Stemmer = 'english', unarunentrada no coinciderunningcon . Añaderunningpara filtrar o reemplazar ese token.
Los nombres de conjuntos pueden contener hasta 256 bytes. Las palabras y sinónimos pueden contener hasta 1024 bytes. Cada conjunto de palabras clave o sinónimos con nombre puede contener hasta 100.000 filas.
Un reemplazo de sinónimo se emite exactamente como se almacena y no es procesado por el tallo. Los sinónimos soportan un reemplazo para cada palabra fuente. Para representar un reemplazo de varias palabras como un solo lexema, se utiliza un separador como un guion bajo, como en united_states.
Tras cambiar un conjunto, el propietario de cada diccionario que hace referencia al conjunto debe ejecutar un no-op ALTER TEXT SEARCH DICTIONARY para forzar una recarga:
ALTER TEXT SEARCH DICTIONARY documents_dict (dummy);
La dummy opción no existe en tokenizer_wholeword. Omitir un valor pide a PostgreSQL que elimine esta opción inexistente, lo que invalida la caché sin cambiar ninguna de las opciones configuradas del diccionario.
Tras recargar el diccionario, regenera los valores almacenados tsvector reescribiendo las filas fuente:
UPDATE documents SET body = body;
Roles y acceso
Utiliza dos roles para separar el acceso a aplicaciones de la administración del tokenizador:
-
app_roleutiliza diccionarios existentes. NecesitaUSAGElos esquemas relevantes ySELECTlas tablas de catálogo de extensiones, pero no necesita poseer los diccionarios. -
tokenizer_admingestiona conjuntos de palabras cerradas y sinónimos, crea y posee diccionarios y configuraciones de búsqueda de texto, y ejecuta el comando de recarga tras cambiar un conjunto.
Concede acceso al esquema de extensión y a las tablas de catálogo:
GRANT USAGE ON SCHEMA tokenizer_ext TO app_role, tokenizer_admin;
GRANT SELECT ON
tokenizer_ext.lakebase_tokenizer_stopwords,
tokenizer_ext.lakebase_tokenizer_synonyms
TO app_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON
tokenizer_ext.lakebase_tokenizer_stopwords,
tokenizer_ext.lakebase_tokenizer_synonyms
TO tokenizer_admin;
tokenizer_admin también necesita CREATE en el esquema donde se almacenan los diccionarios y configuraciones de búsqueda de texto. Crea estos objetos como tokenizer_admin, o transfiere su propiedad a ellos. El acceso de escritura a las tablas de catálogo no otorga la propiedad de diccionarios existentes.
Options
Especifica tokenizer_wholeword opciones en CREATE TEXT SEARCH DICTIONARY o ALTER TEXT SEARCH DICTIONARY. Los nombres de las opciones no son indiferentes a mayúsculas.
| Option | Tipo | Predeterminado | Description |
|---|---|---|---|
Lowercase |
booleano | true |
Convierte los tokens a minúsculas antes de aplicar otras operaciones.
Stemmer = 'english' requiere Lowercase = 'true'. |
Normalize |
NFC, NFD, NFKC, NFKD o none |
none |
Aplica el formulario seleccionado de normalización Unicode. Esto canónica la representación pero no elimina caracteres. Por ejemplo, NFC hace que el acento agudo sea precompuesto é y e seguido de un acento agudo combinado. |
EnglishPossessive |
booleano | true |
Elimina un elemento final 's, ’s, o 's cuando al menos un carácter precede al sufijo. Un sufijo independiente permanece sin cambios. |
StripAccents |
booleano | false |
Aplica la normalización NFKD y elimina las marcas de combinación. Por ejemplo, café se convierte en cafe. Cuando esta opción esté activada, omite Normalize porque el paso NFKD hace que cualquier normalización Unicode separada sea redundante. |
Stopwords |
Nombre del set | Ninguno | Utiliza el conjunto nombrado de tokenizer_ext.lakebase_tokenizer_stopwords. |
Synonyms |
Nombre del set | Ninguno | Utiliza el conjunto nombrado de reemplazos uno a uno de tokenizer_ext.lakebase_tokenizer_synonyms. |
Stemmer |
english |
Ninguno | Utiliza el stemmer inglés Snowball 3.1.0 incluido. Omite esta opción para desactivar el stemming. El stemmer no incluye una lista de palabras clave. |
Tablas de catálogos
| Tabla | Columns | Description |
|---|---|---|
lakebase_tokenizer_stopwords |
name text, word text |
Las tiendas nombraron conjuntos de palabras clave para plantillas de tokenizador que soportan Stopwords. La clave principal es (name, word). |
lakebase_tokenizer_synonyms |
name text, word text, synonym text |
Las tiendas nombraron reemplazos uno a uno para plantillas de tokenizador que soportan Synonyms. La clave principal es (name, word). |
Usa el ranking BM25 con lakebase_text
Las configuraciones de búsqueda de texto construidas con lakebase_tokenizer producen valores estándar de PostgreSQL tsvector compatibles con lakebase_text. Para usar la clasificación de relevancia de BM25 y la recuperación top-K, crea un lakebase_bm25 índice en la misma tsvector columna. Para la sintaxis de instalación, creación de índices y consultas, véase lakebase_text.