2011-05-29 7 views
12

He configurado una nueva configuración de búsqueda de texto en PostgreSQL. Esta configuración usa un archivo de palabra de parada vacío, DictFile y AffFile.Configuración tsvector de PostgreSQL: ¿cómo se permiten caracteres especiales?

Una prueba simple ...

SELECT * 
    FROM ts_debug('public.myconfig', 'C++ and C# and PHP'); 

... funciona bien (casi) excepto el hecho de que los lexemas para 'C++' y 'C#' son ambos 'C'. Básicamente, todo lo que quisiera hacer es asegurarme de que el lexema para 'C++' es 'C++' y que el lexema para 'C#' es 'C#', permitiendo al usuario consultar 'C++'.

Respuesta

4

El problema es doble.

  1. El primer problema es con indexación. La configuración predeterminada utiliza la derivación para indexar los datos y, por lo tanto, obtienes el lexema 'C' para 'C++' y 'C#'. Puede usar la configuración 'simple' para indexar los datos, pero luego terminará con palabras no deseadas en el índice. Lo que hice fue convertir 'C++' a 'Cplusplus' e indexar eso. Dado que 'Cplusplus' no tiene lexema, se inxexed as is. Puede hacer lo mismo para 'C#' haciéndolo 'CSharp' en los datos de índice.

  2. El segundo problema es con la búsqueda. Ahora que los datos indexados están bien, debemos asegurarnos de convertir los términos de búsqueda para las palabras especiales. Si el usuario escribe en 'C++", lo que necesita para convertirlo en 'cplusplus' antes de realizar la búsqueda.

creé una función en la base de datos que llevaba en una cadena y se convierten todas las apariciones de los términos especiales

No he usado TSearch por un tiempo, así que no estoy seguro de si TSearch le permite configurar y establecer una excepción de la misma manera que permite las palabras vacías.

Cuestiones relacionadas