PostgreSQL Text Search Parser utilizando el análisis de límites de la UCI
La primera etapa de la búsqueda de texto completo es el análisis de documentos y los textos de consulta en tokens individuales (palabras distintas, números, etc.). Sin embargo, hay idiomas donde esta tarea no es tan trivial. El ejemplo más destacado son las lenguas del este de Asia (como chino, japonés, coreano y más), donde las palabras no generalmente no están separadas por espacios en blanco y puntuación. Otro ejemplo es el hebreo; Si bien las palabras están separadas por puntuación, algunos personajes pueden considerarse como signos de puntuación o no dependiendo del contexto.
El analizador predeterminado incluido con el subsistema de búsqueda de texto completo de PostgreSQL proporciona resultados bastante insatisfactorios en esos casos. pg_icu_parser es una extensión que proporciona una implementación de analizador de búsqueda de texto completo personalizado que usa rutinas de análisis de límites de palabras de la UCI para extraer tokens fuera del texto de origen. Estos implementan los algoritmos especificados en el Anexo 29 del estándar Unicode, y pueden proporcionar resultados razonables en muchos idiomas.
Actualmente pg_icu_parser debe construirse a partir del código fuente. Asegúrese de tener archivos de soporte de desarrollo (encabezados, etc.) para PostgreSQL disponibles.
Para construir e instalar, ejecute:
$ make install
Esto se desarrollará e instalará en la instalación de PostgreSQL determinada por la primera instancia de pg_config encontrada en la ruta actual. Para apuntar a una instalación específica (o una que no esté en la ruta):
$ make install PG_CONFIG=/path/to/pg_config
La extensión también está disponible en PGXN.
Para cargar la extensión en una base de datos, ejecute el siguiente comando SQL como usuario con permisos adecuados:
CREATE EXTENSION pg_icu_parser;Esto registrará el analizador de texto personalizado en el esquema actual. Para usarlo, se debe crear una configuración de búsqueda de texto como se describe en el manual PostgreSQL. Por ejemplo:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; Los tipos de token que pueden emitir el analizador son word , number , kana , ideo y blank : estos se alinean con las etiquetas de Word Break compatibles con la UCI. No hay restricciones sobre qué diccionarios se pueden usar.
pg_icu_parser expone un solo parámetro de configuración:
pg_icu_parser.locale - cadena, opcional. El local de la UCI para usar con las rutinas de análisis de límites. Si no está configurado, el valor predeterminado es en . Por lo general, no es necesario establecer este parámetro, ya que no hay reglas de detección de límites de palabras que sean sensibles al localidad. Como se describió anteriormente, la principal fuerza de pg_icu_parser versus el analizador default ya integrado en PostgreSQL son los mejores resultados de tokenización en varios idiomas. Además, pg_icu_parser no depende de la configuración local de la base de datos o del sistema operativo subyacente para determinar qué es una letra.
Sin embargo, hay varias compensaciones que ser conscientes de lo que pueden afectar la decisión si pg_icu_parser es apropiado para un caso de uso particular:
El analizador predeterminado puede reconocer una amplia variedad de patrones como tokens, incluidas las URL, las direcciones de correo electrónico, varios tipos distintos de valores numéricos, etc. pg_icu_parser Por otro lado tiene significativamente menos tipos de tokens (y los pocos son compatibles con mucho más gruesos) y no pueden detectar ningún patrón complejo.
Por el momento, pg_icu_parser no admite la función ts_headline . Tal vez en el futuro ...
pg_icu_parser es mucho más lento que el analizador default . Sin embargo, si la codificación del servidor de la base de datos es UTF-8 se utiliza una ruta rápida, lo que reduce la sobrecarga. Vea la sección de referencia a continuación.
Como extensión de terceros, pg_icu_parser solo se puede usar donde el control total de la instalación de PostgreSQL está disponible; Es decir, probablemente no se puede usar con soluciones administradas de PostgreSQL.
El siguiente punto de referencia no científico puede dar una idea de cuánto de desaceleración uno podría esperar de usar pg_icu_parser en lugar del analizador predeterminado. El escenario probado es una consulta para contar el número de tokens que no son de Blank en cada documento en un corpus. El corpus utilizado es el Corpus Haaretz, que consta de 27,139 artículos de lenguaje hebreo corto. Los valores son el tiempo de ejecución promedio en milisegundos de 10 rondas, según lo informado por EXPLAIN ANALYZE :
| Codificación del servidor | default | pg_icu_parser | Desacelerar |
|---|---|---|---|
| UTF-8 | 2,566.9974 | 2,884.3696 | -12.3% |
| ISO-8859-8 | 3,529.6487 | 5.059.3616 | -43.3% |
Por supuesto, diferentes entornos y diferentes corpus pueden tener resultados diferentes, YMMV.
pg_icu_parser tiene licencia bajo la licencia pública de Mozilla 2.0.