tutorial - ¿Puedo configurar PostgreSQL mediante programación para no eliminar las palabras vacías en la búsqueda de texto completo?
postgresql limit offset (2)
Estoy usando la búsqueda de texto completo de PostgreSQL para un proyecto donde las palabras de parada tradicionales (''a'', ''the'', ''if'' etc.) deben ser indexadas y con capacidad de búsqueda, lo que no es el comportamiento predeterminado. Por ejemplo, es posible que desee que mis usuarios encuentren resultados para la consulta "ser o no ser".
La documentation indica que podría lograr esto creando un diccionario de palabras vacías vacío en $SHAREDIR/tsearch_data/english.stop
(por ejemplo), pero esto complicará la implementación; Quiero poder configurar el manejo de la palabra de parada de PostgreSQL con SQL. es posible? Si es así, ¿puede proporcionar una declaración SQL de ejemplo?
De acuerdo con su comentario sobre la respuesta anterior, puede cambiar fácilmente entre el uso de palabras sin parada y todas las palabras para detener . Puedes lograr esto con una configuración de búsqueda personalizada:
(1) Puede crear un diccionario personalizado sin usar el archivo de palabras vacías, por ejemplo:
CREATE TEXT SEARCH DICTIONARY english_stem_nostop (
Template = snowball
, Language = english
);
Tenga en cuenta, en lo anterior StopWords
parámetro StopWords
.
(2) Luego cree una nueva configuración para usar su nuevo diccionario:
CREATE TEXT SEARCH CONFIGURATION public.english_nostop ( COPY = pg_catalog.english );
ALTER TEXT SEARCH CONFIGURATION public.english_nostop
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word WITH english_stem_nostop;
(3) Luego, cuando busque, especifique la configuración que desea usar (alternativamente, puede cambiar la opción default_text_search_config
cada vez), por ejemplo:
SELECT
title
FROM
articles
WHERE
to_tsvector(''english_nostop'', COALESCE(title,'''') || '' '' || COALESCE(body,''''))
@@ to_tsquery(''english_nostop'', ''how & to'');
Puede especificar solo ''english''
en el SQL anterior para usar la configuración normal.
Tenga en cuenta que , en este ejemplo, el uso de la configuración estándar dará lugar a avisos porque solo hay palabras de detención.
Ten en cuenta lo siguiente, sin embargo:
- Si está utilizando índices, necesitará dos, uno para cada configuración. (ver estos documentos: tablas de búsqueda y triggers ).
- Verifique cuáles tokens de analizador desea usar este mapeo según el paso # 2, arriba (vea Parsers ).
No, las palabras de parada solo son configurables a través de ese archivo. Puede tener una función del lado del servidor que modifique el archivo, pero que requiera que el archivo pueda ser escrito por el usuario del servicio de postgres, que probablemente no desee.