Todos los productos
Search
Centro de documentos

Hologres:Full-text inverted index

Última actualización: Sep 06, 2026

Las versiones 4.0 y posteriores de Hologres admiten un índice invertido de texto completo. Esta función se basa en Tantivy, un motor de búsqueda de texto completo de alto rendimiento. También es compatible con el algoritmo de puntuación de similitud BM25, lo que permite clasificar documentos y buscar palabras clave o frases.

Funcionamiento

Cuando usted escribe texto de origen en Hologres, el sistema compila un archivo de índice invertido de texto completo para cada archivo de datos según la configuración del índice. El proceso comienza cuando un tokenizer divide el texto en tokens. Después, el índice registra la asignación de cada token a su texto de origen, junto con su posición y frecuencia de término.

Al ejecutar una búsqueda de texto completo, Hologres primero divide el texto de consulta en un conjunto de tokens de consulta mediante un tokenizer. Luego, utiliza el algoritmo BM25 para calcular una puntuación de relevancia entre cada texto de origen y dicho conjunto de tokens. Este proceso permite búsquedas de texto completo con alta precisión y rendimiento.

Consideraciones

  • En Hologres V4.0 y versiones posteriores, los índices invertidos de texto completo solo son compatibles con tablas de almacenamiento por columnas y de almacenamiento híbrido de filas y columnas. No se admiten en tablas de almacenamiento por filas.

  • Solo puede crear un índice invertido de texto completo en columnas de tipo TEXT, CHAR o VARCHAR.

  • Únicamente se compila un índice invertido de texto completo por columna. Para indexar varias columnas, cree un índice independiente para cada una.

  • Después de crear un índice invertido de texto completo, los archivos de índice correspondientes a los datos existentes y a los nuevos datos cargados de forma masiva se compilan de manera asíncrona durante la compactación de datos. Hasta que se compile el índice, la puntuación de relevancia BM25 de esos datos será 0.

  • El comportamiento de indexación para escrituras de datos en tiempo real varía según la versión. Antes de la V4.0.8, los índices se compilaban de forma síncrona. A partir de la V4.0.8, para mejorar la eficiencia de escritura, el sistema actualiza el índice en memoria de forma asíncrona cada segundo. Solo podrá consultar datos mediante el índice una vez que finalice dicha actualización.

  • Las búsquedas de texto completo solo se ejecutan en columnas que cuentan con un índice invertido de texto completo. No se admite la búsqueda en columnas sin índice.

  • Se recomienda usar recursos serverless para las importaciones masivas de datos. Estos recursos ejecutan la compactación y compilan el índice invertido de texto completo de forma síncrona durante la importación. Para más información, consulte Use Serverless Computing to perform read and write tasks y Use Serverless Computing to perform Compaction tasks. Si no utiliza recursos serverless, se recomienda desencadenar manualmente compaction después de una importación masiva o de modificar un índice mediante el siguiente comando.

    VACUUM <schema_name>.<table_name>;
  • De forma predeterminada, el algoritmo de búsqueda BM25 calcula las puntuaciones de relevancia a partir de estadísticas a nivel de archivo. En Hologres V5.0 y versiones posteriores, utilice el parámetro hg_text_search_bm25_statistics_level para cambiar a la puntuación a nivel de shard, lo que hace que las puntuaciones sean comparables dentro del mismo shard. Si mantiene la puntuación predeterminada a nivel de archivo e importa datos en lotes pequeños, se recomienda desencadenar manualmente la compactación según sea necesario para fusionar los archivos de datos y mejorar la precisión de la búsqueda.

  • Utilice recursos serverless para ejecutar consultas de búsqueda de texto completo.

  • Elija el tokenizer adecuado para su escenario con base en la siguiente tabla:

    Escenario

    Tokenizer

    Descripción

    Extracción de palabras clave de artículos extensos

    Jieba

    Admite el descubrimiento de palabras nuevas y el cambio de modos complejos.

    Búsqueda en textos descriptivos en chino

    IK

    Identifica términos en chino con precisión.

    Búsqueda en textos similares a títulos en inglés

    Simple, Whitespace, Standard

    Sencillos y eficientes. Elija uno según las características específicas de su texto.

    Búsqueda difusa en textos similares a registros

    Ngram

    No requiere diccionario y es adecuado para consultas de texto difusas.

    Búsqueda basada en pinyin para nombres de productos o personas en chino

    Pinyin

    Admite diversos escenarios de búsqueda en pinyin chino, como pinyin completo, abreviaturas de primeras letras y caracteres con múltiples pronunciaciones.

Gestión de índices

Creación de un índice

Sintaxis

CREATE INDEX [ IF NOT EXISTS ] idx_name ON table_name
       USING FULLTEXT (column_name [ , ... ])
       [ WITH ( storage_parameter [ = value ] [ , ... ] ) ];

Parámetros

Parámetro

Descripción

idx_name

El nombre del índice.

table_name

El nombre de la tabla de destino.

column_name

La columna para el índice invertido de texto completo.

storage_parameter

Especifica los parámetros del índice invertido de texto completo. Se admiten los siguientes parámetros:

  • tokenizer: el nombre del tokenizer. Se admiten los siguientes tokenizers:

    • jieba (predeterminado en V4.1 y versiones anteriores): un tokenizer para chino que combina coincidencias basadas en reglas y modelos estadísticos.

    • whitespace: un tokenizer que divide el texto por espacios en blanco.

    • standard: un tokenizer basado en las reglas de segmentación del Anexo #29 del estándar Unicode.

    • simple: un tokenizer que divide el texto por espacios en blanco y signos de puntuación.

    • keyword: un tokenizer que devuelve todo el campo de entrada como un único token.

    • icu: un tokenizer para el procesamiento de texto multilingüe.

    • ik (predeterminado en V4.2 y versiones posteriores): un tokenizer para chino basado en IK Analyzer. Reconoce automáticamente formatos especiales como palabras en inglés, direcciones de correo electrónico, URL (sin ://) y direcciones IP. Compatible desde Hologres V4.0.9.

    • ngram: un tokenizer de ventana deslizante basado en caracteres que divide el texto en n-gramas (secuencias contiguas de n caracteres). Mejora la recuperación y las capacidades de coincidencia difusa, por lo que resulta útil para acelerar consultas LIKE e ILIKE. Compatible desde Hologres V4.0.9.

    • pinyin: un tokenizer de pinyin. Genera pinyin para caracteres y palabras en chino, y puede derivar divisiones en pinyin para cadenas que no están en chino. Esto permite generar pinyin con mayor precisión y mejorar la recuperación en las búsquedas. Compatible desde Hologres V4.0.9.

  • analyzer_params: la configuración del tokenizer, especificada como una cadena con formato JSON.

    • Cada tokenizer tiene una configuración predeterminada de analyzer_params. En la mayoría de los casos, basta con especificar el parámetro tokenizer y omitir analyzer_params para usar los valores predeterminados.

    • Es posible personalizar algunos de estos ajustes. Para más información, consulte Advanced operations: Customize tokenizer configurations.

  • index_options: especifica el nivel de detalle que se almacena en el índice, lo cual afecta el almacenamiento requerido y las funciones compatibles. Disponible desde Hologres V4.1.9. Para más detalles, consulte index_options configuration a continuación.

Nota

Cada índice solo admite un tokenizer y un conjunto de analyzer_params.

A partir de la V4.2, los índices nuevos que no especifiquen explícitamente un tokenizer utilizarán ik de forma predeterminada. Los índices creados antes de la actualización conservan su tokenizer original.

Configuración de index_options

El parámetro index_options admite tres niveles. Las opciones de nivel superior incluyen automáticamente toda la información de los niveles inferiores: freqs incluye toda la información de docs, y positions incluye toda la información de freqs y docs.

Valor

Contenido del índice

Impacto y limitaciones

Casos de uso

positions (predeterminado)

ID de documento + frecuencia de término + posición

Compatibilidad total con las funciones: admite consultas de frases y puntuación de relevancia estándar.

Escenarios generales de búsqueda de texto completo.

freqs

ID de documento + frecuencia de término

No se admiten consultas de frases; devuelven un error.

Escenarios que requieren puntuación y clasificación basadas en la frecuencia de término, pero no necesitan coincidencia exacta de frases.

docs

Solo el ID de documento

  • Como falta la información de frecuencia de término, la puntuación de relevancia ignora las diferencias de frecuencia (la puntuación TF es la misma para todos los documentos coincidentes).

  • No se admiten consultas de frases; devuelven un error.

Ideal para escenarios sensibles al almacenamiento que solo requieren comprobaciones de existencia (filtrado) y no necesitan puntuación de relevancia.

Nota

Para los índices que utilizan el tokenizer keyword, el nivel de registro se fija en docs y la configuración de index_options no aplica.

Ejemplos

  • Cree un índice invertido de texto completo con el tokenizer y la configuración predeterminados (jieba en V4.1 y versiones anteriores; ik en V4.2 y versiones posteriores).

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1);
  • Especifique explícitamente el tokenizer ik y utilice su configuración predeterminada.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • Especifique explícitamente una configuración personalizada de tokenizer: el tokenizer jieba en modo exact con únicamente el filtro lowercase.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
  • Establezca index_options en freqs al crear el índice. Esto ahorra espacio, pero no admite consultas de frases. Compatible desde Hologres V4.1.9.

    CREATE INDEX idx1 ON tbl
           USING FULLTEXT (col1)
           WITH (index_options = 'freqs');
Nota
  • Después de crear un índice invertido de texto completo, la compactación compila los archivos de índice tras la importación de datos.

  • Se recomienda usar recursos de cómputo serverless para las importaciones por lotes. Estos recursos completan la compactación y compilan el índice invertido de texto completo de forma síncrona durante la importación. Para más información, consulte Use serverless computing to perform read and write tasks y Use serverless computing to perform compaction tasks.

  • Si no utiliza recursos serverless, se recomienda desencadenar manualmente la compactación después de una importación por lotes o de modificar un índice mediante la ejecución del siguiente comando. Para más información, consulte Compaction (Beta).

    VACUUM <schema_name>.<table_name>;

Modificación de un índice

Sintaxis

-- Modify index configuration
ALTER INDEX [ IF EXISTS ] <idx_name> SET ( <storage_parameter> = '<storage_value>' [ , ... ] );

-- Reset to default configuration
ALTER INDEX [ IF EXISTS ] <idx_name> RESET ( <storage_parameter> [ , ... ] );

Parámetros

Para consultar la descripción detallada de los parámetros, consulte Parameters.

Ejemplos

Nota

Después de modificar un índice invertido de texto completo, la compactación compila los archivos de índice de forma asíncrona. Se recomienda desencadenar manualmente la compactación tras modificar un índice mediante la ejecución del comando VACUUM <schema_name>.<table_name>;. Para más información, consulte Compaction.

  • Cambie el tokenizer del índice a standard.

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • Cambie el tokenizer del índice a ik en modo ik_max_word, sin convertir a minúsculas y sin aplicar ningún filtro.

    ALTER INDEX idx1 SET (
      tokenizer = 'ik',
      analyzer_params = '{"tokenizer":{"type":"ik","mode":"ik_max_word","enable_lowercase": false}}'
    );
  • Restablezca el tokenizer predeterminado jieba y utilice su configuración predeterminada de analyzer_params.

    ALTER INDEX idx1 RESET (tokenizer);
    ALTER INDEX idx1 RESET (tokenizer, analyzer_params);
  • Restablezca la configuración predeterminada de analyzer_params para el tokenizer actual.

    ALTER INDEX idx1 RESET (analyzer_params);
  • Cambie index_options del índice a docs.

    ALTER INDEX idx1 SET (index_options = 'docs');
  • Restablezca index_options a su valor predeterminado, positions.

    ALTER INDEX idx1 RESET (index_options);

Eliminación de un índice

Sintaxis

DROP INDEX [ IF EXISTS ] <idx_name> [ RESTRICT ];

Parámetros

Para consultar la descripción detallada de los parámetros, consulte Parameters.

Consulta de índices

Hologres proporciona la tabla del sistema hologres.hg_index_properties, donde puede consultar los índices invertidos de texto completo creados para una tabla y sus posiciones correspondientes.

SELECT * FROM hologres.hg_index_properties;

Ejecute la siguiente instrucción SQL para consultar la tabla y la columna asociadas a un índice.

SELECT 
    t.relname AS table_name, 
    a.attname AS column_name
FROM pg_class t
    JOIN pg_index i ON t.oid = i.indrelid
    JOIN pg_class idx ON i.indexrelid = idx.oid
    JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
WHERE t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '<namespace>')
    AND idx.relname = '<indexname>'
LIMIT 1;

Parámetros:

  • namespace: el valor del campo table_namespace en el resultado del comando SELECT * FROM hologres.hg_index_properties;.

  • indexname: el nombre real del índice.

Consulta del progreso de compilación del índice

Después de crear un índice invertido de texto completo, utilice la función integrada hg_show_build_index_progress para consultar el progreso de compilación del índice en tiempo real. Esta función devuelve el estado de compilación de todos los índices de texto completo de la tabla especificada.

Ejemplo

SELECT * FROM hg_show_build_index_progress('<table_name>');

Notas de uso

  • Para invocar esta función, debe contar con el permiso SELECT sobre la tabla especificada.

  • La función devuelve información de compilación de todos los índices de texto completo de la tabla, incluido el número de archivos compilados, el número total de archivos, el progreso de compilación en porcentaje y el tiempo restante estimado.

Valores de retorno

El resultado incluye los siguientes campos:

Campo

Tipo de dato

Descripción

schema_name

TEXT

El nombre del esquema que contiene el índice.

table_name

TEXT

El nombre de la tabla.

index_name

TEXT

El nombre del índice.

index_id

BIGINT

El ID único del índice.

am_name

TEXT

El tipo de índice.

built_index_size

TEXT

El tamaño del índice ya compilado.

built_num_files

INTEGER

El número de archivos cuya compilación de índice finalizó.

target_num_files

INTEGER

El número total de archivos para los cuales se debe compilar el índice.

progress

TEXT

El progreso de compilación, expresado como porcentaje.

estimated_remaining_time

TEXT

El tiempo de compilación restante estimado.

Búsqueda de texto completo mediante un índice

Hologres admite diversos modos de búsqueda que le permiten adaptar las búsquedas de texto completo a su lógica de negocio.

Modo de búsqueda

Descripción

Coincidencia de palabras clave

Busca palabras clave en un objeto de búsqueda tokenizado. Permite definir la relación entre las palabras clave mediante lógica AND/OR.

Búsqueda de frases

Busca una frase completa. Para que haya coincidencia, las palabras de la frase deben aparecer a una distancia específica entre sí.

Búsqueda en lenguaje natural

Permite definir condiciones de consulta complejas mediante sintaxis de lenguaje natural. Esto incluye especificar lógica AND/OR, términos obligatorios, términos excluidos y frases.

Búsqueda de términos

Realiza una coincidencia exacta del objeto de búsqueda. El índice debe contener la cadena de consulta exacta para devolver una coincidencia.

Función TEXT_SEARCH

La función TEXT_SEARCH calcula la puntuación de relevancia BM25 de un origen de búsqueda con base en un objeto de búsqueda.

Sintaxis de la función

TEXT_SEARCH (
  <search_data> TEXT/VARCHAR/CHAR
  ,<search_expression> TEXT
  [ ,<mode> TEXT DEFAULT 'match'
  ,<operator> TEXT DEFAULT 'OR'
  ,<tokenizer> TEXT DEFAULT ''
  ,<analyzer_params> TEXT DEFAULT ''
  ,<options> TEXT DEFAULT '']
)

Parámetros

Parámetro

Obligatorio

Descripción

search_data

Sí

El origen de búsqueda. Los tipos de datos compatibles son TEXT, VARCHAR y CHAR. Este parámetro debe ser una columna que cuente con un índice de texto completo; de lo contrario, se devuelve un error.

search_expression

Sí

El objeto de búsqueda. Los tipos de datos compatibles son TEXT, VARCHAR y CHAR. Este parámetro debe ser una constante.

mode

No

El modo de búsqueda. Se admiten los siguientes modos:

  • match (predeterminado): coincidencia de palabras clave. Cada token generado por la tokenización se trata como una palabra clave. El parámetro operator define la relación entre las palabras clave y su valor predeterminado es OR.

  • phrase: búsqueda de frases. El parámetro slop dentro de options configura la distancia máxima entre las palabras de una frase. El valor predeterminado es 0, lo que significa que las palabras deben ser adyacentes. La búsqueda de frases no admite consultas difusas.

  • natural_language: búsqueda en lenguaje natural. Este modo admite condiciones de consulta complejas como lógica AND/OR, términos obligatorios, términos excluidos y frases. Para más información, consulte Tantivy.

  • term: búsqueda de términos. El parámetro search_expression no se tokeniza ni se procesa de ninguna otra forma. La función realiza una coincidencia exacta en el índice. La búsqueda de términos no admite consultas difusas.

  • fuzzy: búsqueda difusa. Realiza una coincidencia difusa en search_expression con base en la distancia de edición. Compatible con Hologres V4.2 y versiones posteriores.

operator

No

Especifica el operador lógico que se usa entre las palabras clave. Este parámetro solo surte efecto cuando mode se establece en match. Se admiten los siguientes valores:

  • OR (predeterminado): si el objeto de búsqueda contiene varios tokens, la función devuelve una coincidencia cuando encuentra cualquiera de ellos.

  • AND: si el objeto de búsqueda contiene varios tokens, la función devuelve una coincidencia únicamente cuando encuentra todos.

tokenizer, analyzer_params

No

Especifica el tokenizer y su configuración para search_expression. En la mayoría de los casos, no es necesario configurar estos parámetros.

  • Si no se especifican, la función utiliza el mismo tokenizer y la misma configuración que el índice invertido de texto completo de la columna search_data. Si el origen de búsqueda es una constante, se usa el tokenizer predeterminado (jieba).

  • Si se especifican, la función tokeniza search_expression con el tokenizer y la configuración indicados.

options

No

Otros parámetros para la búsqueda de texto completo. El formato de los parámetros de entrada es 'key1=v1;key2=v2;....;keyN=vN;'. Se admiten las siguientes opciones:

  • slop: solo surte efecto cuando mode es phrase. Puede ser 0 (valor predeterminado) o un entero positivo, y define la distancia máxima permitida entre las palabras de una frase.

  • fuzziness: solo surte efecto cuando mode es match, natural_language o fuzzy. Especifica la distancia de edición máxima (el número total de inserciones, eliminaciones o sustituciones de caracteres) para la coincidencia difusa. Los valores admitidos son:

    • 0 (predeterminado): deshabilita la coincidencia difusa. La cadena de búsqueda debe coincidir de forma exacta.

    • 1 o 2: se permite una distancia de edición de 1 o 2.

    • AUTO: la distancia de edición se selecciona automáticamente según la longitud de la cadena de búsqueda. La regla predeterminada es: longitud <3 → 0, longitud 3–5 → 1, longitud >5 → 2.

    • AUTO:<low>,<high>: personaliza los umbrales de AUTO. Por ejemplo, AUTO:3,5 significa: longitud <3 → 0, longitud 3–5 → 1, longitud ≥6 → 2.

  • fuzzy_max_expansions: solo surte efecto cuando mode es match, natural_language o fuzzy. Especifica el número máximo de términos candidatos generados durante la coincidencia difusa. El valor predeterminado es 50. Un valor mayor mejora la recuperación, pero incrementa la sobrecarga de la consulta.

  • fuzzy_transpositions: solo surte efecto cuando mode es match, natural_language o fuzzy. Especifica si la transposición de dos caracteres adyacentes se trata como una sola edición. El valor predeterminado es true.

  • minimum_should_match: solo surte efecto cuando mode es match o natural_language. Especifica cuántos de los tokens generados a partir del objeto de búsqueda debe contener un documento para que se devuelva. Esta opción solo filtra el conjunto de resultados y no afecta las puntuaciones BM25. Compatible con Hologres V5.0 y versiones posteriores. Se admiten los siguientes formatos:

    • Entero positivo: el número mínimo de tokens que deben coincidir. Por ejemplo, 2 exige que coincidan como mínimo dos tokens.

    • Entero negativo: el número máximo de tokens que pueden faltar. Por ejemplo, -1 permite que falte como máximo un token.

    • Porcentaje positivo: el número mínimo de tokens coincidentes, calculado como proporción del total de tokens y redondeado hacia abajo. Por ejemplo, si el objeto de búsqueda genera cinco tokens, 75% exige que coincidan como mínimo floor(5 × 0.75) = 3 tokens.

    • Porcentaje negativo: el número máximo de tokens faltantes, calculado como proporción del total de tokens y redondeado hacia abajo. Por ejemplo, si el objeto de búsqueda genera cinco tokens, -25% permite que falte como máximo floor(5 × 0.25) = 1 token, lo que significa que deben coincidir al menos cuatro tokens.

    • Especificación condicional: utiliza el formato token_count<spec. La especificación posterior a la condición se aplica cuando el número de tokens generados a partir del objeto de búsqueda supera la cantidad indicada. Por ejemplo, 3<-25% exige que coincidan todos los tokens cuando el total es 3 o menos, y aplica -25% cuando el total es mayor que 3.

    • Múltiples especificaciones condicionales: separe las condiciones con un solo espacio. Hologres aplica la primera condición que se cumpla. Por ejemplo, 3<2 5<-1 exige que coincidan todos los tokens cuando el total es 3 o menos, aplica 2 cuando el total es mayor que 3 y menor o igual a 5, y aplica -1 cuando el total es mayor que 5.

    • En el modo natural_language, esta opción solo surte efecto cuando la cadena de consulta se analiza sintácticamente como una consulta de combinación booleana. Si la cadena se analiza como una consulta de frase, como "shandong university" entre comillas dobles, Hologres omite esta opción de forma silenciosa y ejecuta una coincidencia de frase.

    • Esta opción solo aplica a consultas con semántica should. Una consulta carece de semántica should cuando mode es match y operator es AND, o cuando mode es natural_language y cada elemento está restringido por un operador + o -. En estos casos, un valor de minimum_should_match mayor que 0 devuelve un conjunto de resultados vacío.

Nota

El parámetro slop representa el intervalo máximo permitido (o costo de transformación) entre las palabras de una frase. Para tokenizers como jieba, keyword e icu, la unidad de distancia es el número de caracteres, no el número de tokens. Para tokenizers como standard, simple y whitespace, la unidad es el número de tokens.

Valor de retorno

Devuelve un valor FLOAT no negativo que representa la puntuación de relevancia BM25 entre el origen de búsqueda y el objeto de búsqueda. Una puntuación más alta indica mayor relevancia. La puntuación es 0 si el texto es completamente irrelevante.

Ejemplos

  • Utilice el modo de coincidencia de palabras clave y cambie el operador a AND.

    -- It is recommended to specify parameter names.
    SELECT TEXT_SEARCH (content, 'machine learning', operator => 'AND') FROM tbl;
    
    -- If you do not specify parameter names, you must provide them in the correct order.
    SELECT TEXT_SEARCH (content, 'machine learning', 'match', 'AND') FROM tbl;
  • Utilice el modo de búsqueda de frases y establezca slop en 2.

    SELECT TEXT_SEARCH (content, 'machine learning', 'phrase', options => 'slop=2;') FROM tbl;
  • Utilice el modo de búsqueda en lenguaje natural.

    -- Use the AND and OR operators to define search logic for the tokens.
    SELECT TEXT_SEARCH (content, 'machine AND (system OR recognition)', 'natural_language') FROM tbl;
    
     -- Use + (required term) and - (excluded term) to define search logic for the tokens.
    SELECT TEXT_SEARCH (content, '+learning -machine system', 'natural_language') FROM tbl;
  • Utilice el modo de búsqueda de términos.

    SELECT TEXT_SEARCH (content, 'machine learning', 'term') FROM tbl;
  • Utilice el modo de búsqueda difusa con fuzziness establecido en 1.

    SELECT TEXT_SEARCH (content, 'machine learning', 'fuzzy', options => 'fuzziness=1;') FROM tbl;

Función TOKENIZE

La función TOKENIZE devuelve los resultados de la tokenización con base en la configuración del tokenizer. Utilice esta función para depurar la tokenización de un índice invertido de texto completo.

Sintaxis de la función

TOKENIZE (
  <search_data> TEXT
  [ ,<tokenizer> TEXT DEFAULT ''
  ,<analyzer_params> TEXT DEFAULT '']
)

Parámetros

  • search_data: obligatorio. El texto de destino que se va a tokenizar. Este parámetro debe ser una constante.

  • tokenizer, analyzer_params: opcional. Especifica el tokenizer y su configuración para el texto search_data. El tokenizer predeterminado es jieba en V4.1 y versiones anteriores, y ik en V4.2 y versiones posteriores.

Valor de retorno

Devuelve una matriz TEXT que contiene los tokens del texto de destino.

Comprobación del uso del índice

Revise el plan de ejecución para comprobar si una consulta SQL utiliza el índice invertido de texto completo. La presencia de Fulltext Filter en el plan indica que el índice se utilizó correctamente. Para más información sobre los planes de ejecución, consulte EXPLAIN and EXPLAIN ANALYZE.

SQL de ejemplo:

EXPLAIN ANALYZE SELECT * FROM wiki_articles WHERE text_search(content, 'Yangtze River') > 0;

A continuación se muestra el plan de ejecución. Contiene el campo Fulltext Filter, lo que indica que la instrucción SQL utilizó correctamente el índice invertido de texto completo.

QUERY PLAN
Gather  (cost=0.00..1.00 rows=1 width=12)
  ->  Local Gather  (cost=0.00..1.00 rows=1 width=12)
        ->  Index Scan using Clustering_index on wiki_articles  (cost=0.00..1.00 rows=1 width=12)
              Fulltext Filter: (text_search(content, search_expression => 'Yangtze River'::text, mode => match, operator => OR, tokenizer => jieba, analyzer_params => {"filter":["removepunct","lowercase",{"stop_words":["_english_"],"type":"stop"},{"language":"english","type":"stemmer"}],"tokenizer":{"hmm":true,"mode":"search","type":"jieba"}}, options => ) > '0'::double precision)
Query Queue: init_warehouse.default_queue
Optimizer: HQO version 4.0.0

Recomendaciones

Reconstruir índices con recursos serverless

Algunos cambios de propiedades activan la compactación y la reconstrucción de índices, lo que puede provocar picos en el uso de CPU. Gestione estos cambios de la siguiente manera:

Cambios en bitmap_columns, dictionary_encoding_columns o índices vectoriales

Utilice la sintaxis REBUILD con recursos de Serverless Computing en lugar de ALTER TABLE ... SET. Para obtener más información, consulte REBUILD.

ASYNC REBUILD TABLE <table_name>
WITH (
    rebuild_guc_hg_computing_resource = 'serverless'
)
SET (
    bitmap_columns = '<col1>,<col2>',
    dictionary_encoding_columns = '<col1>:on,<col2>:off',
    vectors = '{
    "<col_vector>": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "rabitq",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "use_reorder": true,
            "max_total_size_to_merge_mb": 4096
        }
    }
    }'
);

Cambios en el almacenamiento columnar para datos JSON o columnas de índice de texto completo

La sintaxis REBUILD aún no es compatible con estos cambios. Utilice una tabla temporal:

BEGIN;
-- Clean up any existing temporary table
DROP TABLE IF EXISTS <table_new>;
-- Create a temporary table with the same structure
SET hg_experimental_enable_create_table_like_properties = on;
CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');
COMMIT;

-- Apply the new column properties to the temporary table
ALTER TABLE <table_new> ALTER COLUMN <column_name> SET (enable_columnar_type = ON);
CREATE INDEX <idx_name> ON <table_new> USING FULLTEXT (column_name);

-- Insert data using Serverless resources (index building completes synchronously)
SET hg_computing_resource = 'serverless';
INSERT INTO <table_new> SELECT * FROM <table>;
ANALYZE <table_new>;

BEGIN;
-- Replace the original table with the temporary table
DROP TABLE IF EXISTS <table>;
ALTER TABLE <table_new> RENAME TO <table>;
COMMIT;

Otros cambios de propiedades (por ejemplo, distribution_key, clustering_key, segment_key, formato de almacenamiento)

Utilice la sintaxis REBUILD con recursos de Serverless Computing.

Operaciones avanzadas: personalizar las configuraciones del tokenizer

Hologres recomienda usar la configuración predeterminada del tokenizer. Sin embargo, si esta configuración no cubre sus necesidades para un índice invertido de texto completo, puede personalizar el tokenizer y obtener una segmentación más flexible.

Requisitos de analyzer_params

El parámetro analyzer_params debe cumplir con los siguientes requisitos:

  • Debe ser una cadena JSON.

  • El objeto JSON de nivel superior admite dos claves: tokenizer y filter. Se configuran de la siguiente manera:

    • filter: opcional. Es un arreglo JSON que se utiliza para configurar filtros. Los filtros se aplican en el orden especificado cuando hay varios.

    • tokenizer: obligatorio. Es un objeto JSON que configura las propiedades del tokenizer. Este objeto JSON admite las siguientes claves:

      • type: obligatorio. El nombre del tokenizer.

      • Los parámetros del objeto tokenizer varían según el tokenizer elegido. Para más detalles, consulte la siguiente tabla:

        Tokenizer

        Parámetro




        Descripción

        Valor

        jieba

        mode

        El modo de tokenización.

        • search (predeterminado): enumera varias combinaciones posibles de tokens, lo cual permite redundancia.

        • exact: no genera divisiones redundantes.

        hmm

        Determina si se usa un modelo oculto de Márkov para identificar palabras que no están en el diccionario. Esta función mejora la identificación de palabras nuevas.

        • true (predeterminado): usa el modelo.

        • false: no usa el modelo.

        standard

        max_token_length

        La longitud máxima del token.

        Un número entero positivo. El valor predeterminado es 255. Si un token supera esta longitud, se divide en intervalos de max_token_length.

        ik

        mode

        El modo de tokenización.

        • ik_max_word (predeterminado): tokenización detallada que genera todas las palabras cortas posibles.

        • ik_smart: modo de tokenización general que prioriza las palabras más largas para reducir la cantidad de tokens. Los tokens generados no se superponen. Este modo intenta combinar números y clasificadores en un solo token.

        enable_lowercase

        Determina si los tokens se convierten a minúsculas.

        • true (predeterminado)

        • false

        ngram

        min_ngram

        La longitud mínima en caracteres de un token.

        Un número positivo. El valor predeterminado es 1. La diferencia máxima permitida respecto a max_ngram es 3.

        Nota: puede ajustar la diferencia máxima si establece el siguiente GUC; por ejemplo, SET hg_fulltext_index_max_ngram_diff = 5;

        max_ngram

        La longitud máxima en caracteres de un token.

        Un número positivo. El valor predeterminado es 2. El valor debe estar en el rango [1, 255]. La diferencia máxima permitida respecto a min_ngram es 3.

        Nota

        Una diferencia grande entre max_ngram y min_ngram provoca que el tokenizer ngram genere muchos tokens. Esto aumenta el consumo de recursos, el almacenamiento y el tiempo de compilación del índice.

        prefix_only

        Determina si se generan únicamente n-gramas de prefijo.

        • true

        • false (predeterminado)

        pinyin

        keep_first_letter

        Determina si se conserva la primera letra de cada carácter chino.

        • true (predeterminado): conserva las iniciales del pinyin.

        • false: no conserva la primera letra.

        keep_separate_first_letter

        Determina si la primera letra de cada carácter chino se conserva como un token independiente.

        • true: conserva la inicial de cada carácter.

        • false (predeterminado): no las conserva como tokens independientes.

        limit_first_letter_length

        La longitud máxima del token que contiene las primeras letras combinadas.

        Un número entero. El valor predeterminado es 16.

        keep_full_pinyin

        Determina si se conserva el pinyin completo de cada carácter chino.

        • true (predeterminado): conserva el pinyin.

        • false: no conserva el pinyin completo.

        keep_joined_full_pinyin

        Determina si el pinyin completo de cada carácter chino se une en un solo token.

        • true: habilita la concatenación.

        • false (predeterminado): no une el pinyin.

        keep_none_chinese

        Determina si se conservan las letras o los números no chinos en el resultado.

        • true (predeterminado): los conserva.

        • false: no los conserva.

        keep_none_chinese_together

        Determina si las letras o los números no chinos consecutivos se mantienen juntos como un solo token.

        • true (predeterminado): mantiene juntas las secuencias de letras y dígitos.

        • false: no conserva la forma original.

        Nota

        Este parámetro solo surte efecto cuando keep_none_chinese se establece en true.

        keep_none_chinese_in_first_letter

        Determina si se conservan las letras o los números no chinos en el token de primeras letras.

        • true (predeterminado): conserva el token.

        • false: no los conserva.

        keep_none_chinese_in_joined_full_pinyin

        Determina si se conservan las letras o los números no chinos en el token de pinyin completo unido.

        • true: conserva el token.

        • false (predeterminado): no los conserva.

        none_chinese_pinyin_tokenize

        Determina si las letras no chinas se dividen en términos de pinyin independientes cuando forman un pinyin válido.

        • true (predeterminado): las divide.

        • false: no las divide.

        Nota

        Este parámetro solo surte efecto cuando keep_none_chinese y keep_none_chinese_together se establecen en true.

        keep_original

        Determina si se conserva la entrada original.

        • true: conserva la entrada original.

        • false (predeterminado): no conserva la entrada original.

        lowercase

        Determina si las letras no chinas se convierten a minúsculas.

        • true (predeterminado)

        • false

        trim_whitespace

        Determina si se quitan los espacios en blanco.

        • true (predeterminado)

        • false

        remove_duplicated_term

        Determina si se eliminan los términos duplicados.

        • true: elimina las palabras vacías.

        • false (predeterminado): no elimina los duplicados.

        keep_separate_chinese

        Determina si los caracteres chinos individuales se conservan como tokens independientes.

        • true: conserva los caracteres.

        • false (predeterminado): no los conserva.

Valores predeterminados de analyzer_params

A continuación se muestra la configuración predeterminada de analyzer_params para distintos tokenizers.

Tokenizer

Valor predeterminado de analyzer_params

jieba (tokenizer predeterminado en V4.1 y versiones anteriores)

{
  "tokenizer": {
    "type": "jieba", 
    "mode": "search",
    "hmm": true
  }, 
  "filter": [
    "removepunct",
    "lowercase",
    {"type": "stop", "stop_words": ["_english_"]},
    {"type": "stemmer", "language": "english"}
  ]
}

whitespace

{
  "tokenizer": {
    "type": "whitespace"
  }
}

keyword

{
  "tokenizer": {
    "type": "keyword"
  }
}

simple

{
  "tokenizer": {
    "type": "simple"
  }, 
  "filter": [
    "lowercase"
  ]
}

standard

{
  "tokenizer": {
    "type": "standard",
    "max_token_length": 255
  }, 
  "filter": [
    "lowercase"
  ]
}

icu

{
  "tokenizer": {
    "type": "icu"
  }, 
  "filter": [
    "removepunct",
    "lowercase"
  ]
}

ik (tokenizer predeterminado en V4.2 y versiones posteriores)

{
  "tokenizer": {
    "type": "ik",
    "mode": "ik_max_word",
    "enable_lowercase": true
  },
  "filter": [
    {"type": "stop", "stop_words": ["_english_"]},
    {"type": "stemmer", "language": "english"}
  ]
}

ngram

{
  "tokenizer": {
    "type": "ngram",
    "min_gram": 1,
    "max_gram": 2,
    "prefix_only": false
  }
}

pinyin

{
  "tokenizer": {
    "type": "pinyin",
    "keep_first_letter": true,
    "keep_separate_first_letter": false,
    "keep_full_pinyin": true,
    "keep_joined_full_pinyin": false,
    "keep_none_chinese": true,
    "keep_none_chinese_together": true,
    "none_chinese_pinyin_tokenize": true,
    "keep_original": false,
    "limit_first_letter_length": 16,
    "lowercase": true,
    "trim_whitespace": true,
    "keep_none_chinese_in_first_letter": true,
    "keep_none_chinese_in_joined_full_pinyin": false,
    "remove_duplicated_term": false,
    "ignore_pinyin_offset": true,
    "fixed_pinyin_offset": false,
    "keep_separate_chinese": false
  }
}

filter configuración**

Hologres es compatible con los siguientes filtros en analyzer_params.

Nota

Los filtros se aplican en el orden especificado cuando hay varios.

Filtro

Descripción

Formato del parámetro

Ejemplo de uso

lowercase

Convierte a minúsculas las letras mayúsculas de un token.

Use el nombre del filtro como cadena.

"lowercase"
  • Definición del filtro

    "filter": ["lowercase"]
  • Resultado del filtro

    ["Hello", "WORLD"] -> ["hello", "world"]

stop

Elimina los tokens de palabras vacías.


stop_words: una lista de palabras vacías. La lista debe contener únicamente cadenas. Puede proporcionar una lista personalizada o usar uno de los siguientes diccionarios integrados para idiomas específicos:

"_english_"
    "_danish_"
    "_dutch_"
    "_finnish_"
    "_french_"
    "_german_"
    "_hungarian_"
    "_italian_"
    "_norwegian_"
    "_portuguese_"
    "_russian_"
    "_spanish_"
    "_swedish_"
  • Definición del filtro

    "filter": [{
      "type": "stop",
      "stop_words": ["_english_", "cat"]
    }]
  • Resultado del filtro

    ["the", "cat", "is", "on", "a", "mat"] -> ["mat"]

    Nota

    La palabra "cat" es una palabra vacía personalizada; "the", "is", "on" y "a" provienen del diccionario integrado _english_.

stemmer

Reduce los tokens a su forma raíz (lexema) según las reglas gramaticales del idioma especificado.

language: el idioma. Son compatibles los siguientes idiomas integrados.

"arabic",
    "danish",
    "dutch",
    "english",
    "finnish",
    "french",
    "german",
    "greek",
    "hungarian",
    "italian",
    "norwegian",
    "portuguese",
    "romanian",
    "russian",
    "spanish",
    "swedish",
    "tamil",
    "turkish"
  • Definición del filtro

    "filter": [{
      "type": "stemmer",
      "language": "english"
    }]
  • Resultado del filtro

    ["machine", "learning"] -> ["machin", "learn"]

length

Elimina los tokens que superan una longitud específica.

max: la longitud máxima. El valor debe ser un número entero positivo.

{"type": "length", "max": 10}
  • Definición del filtro

    "filter": [{"type": "length", "max": 10}]
  • Resultado del filtro

    ["AI", "for", "Artificial", "Intelligence"] -> ["AI", "for", "Artificial"]

removepunct

Elimina los tokens formados únicamente por signos de puntuación.

Use el nombre del filtro como cadena.

"removepunct"
Nota

A partir de V4.0.8, removepunct es compatible con el parámetro mode, que define el modo de eliminación. Los valores válidos son:

  • if_all (predeterminado): elimina un token solo si todos sus caracteres son signos de puntuación.

  • if_any: elimina un token si contiene algún signo de puntuación.

  • Definición del filtro

    "filter": ["removepunct"]
    Nota

    Esto equivale a "filter": [{"type": "removepunct", "mode": "if_all"}].

  • Resultado del filtro

    ["Chinese", "english", "Chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."]->["Chinese", "english", "Chinese.", "english.", "124", "124!=8"]

    "filter": [{"type": "removepunct", "mode": "if_any"}]

    ["Chinese", "english", "Chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."] -> ["Chinese", "english", "124"]

pinyin

Proporciona filtrado de tokens específico para pinyin.

{
  "type": "pinyin",
  "keep_first_letter": true,
  "keep_separate_first_letter": false,
  "keep_full_pinyin": true,
  "keep_joined_full_pinyin": false,
  "keep_none_chinese": true,
  "keep_none_chinese_together": true,
  "none_chinese_pinyin_tokenize": true,
  "keep_original": false,
  "limit_first_letter_length": 16,
  "lowercase": true,
  "trim_whitespace": true,
  "keep_none_chinese_in_first_letter": true,
  "keep_none_chinese_in_joined_full_pinyin": false,
  "remove_duplicated_term": false,
  "ignore_pinyin_offset": true,
  "fixed_pinyin_offset": false,
  "keep_separate_chinese": false
}

Usa las mismas propiedades que el tokenizer pinyin.