спецификация для встроенного типа словаря отрицает любое сохранение порядка, лучше думать о словаре как о незаказанном наборе key: value
пары...
можно хотеть проверить OrderedDict
модуль , который является реализацией заказанного словаря с Ключевым Порядком Вставки.
Согласно вашему комментарию к предыдущему ответу, вы можно легко переключаться между использованием без стоп-слов и всех стоп-слов . Вы можете добиться этого с помощью настраиваемой конфигурации поиска:
(1) Вы можете создать пользовательский словарь без использования файла стоп-слов, например:
CREATE TEXT SEARCH DICTIONARY english_stem_nostop (
Template = snowball
, Language = english
);
Обратите внимание, что в приведенном выше примере я пропустил параметр StopWords
.
(2) Затем создайте новую конфигурацию для использования вашего нового словаря:
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) Затем при поиске укажите конфигурацию, которую вы хотите использовать (в качестве альтернативы вы можете каждый раз изменять параметр default_text_search_config
) , например:
SELECT
title
FROM
articles
WHERE
to_tsvector('english_nostop', COALESCE(title,'') || ' ' || COALESCE(body,''))
@@ to_tsquery('english_nostop', 'how & to');
Вы можете указать только 'english'
в приведенном выше SQL, чтобы использовать обычную конфигурацию.
Обратите внимание , что в этом примере использование стандартной конфигурации приведет к уведомлениям, потому что есть только стоп-слова.
Однако имейте в виду следующее:
Нет, стоп-слова можно настроить только через этот файл. У вас может быть функция на стороне сервера, которая изменяет файл, но для этого требуется, чтобы файл был доступен для записи пользователем службы postgres, что вам, вероятно, не нужно.