Как сохранить регистрационный номер с sla sh в полнотекстовом поле PostgreSQL? - PullRequest
2 голосов
/ 23 января 2020

У меня проблема с сохранением регистрационных номеров, которые содержат имя sh в имени. Примером идентификатора является ЦИК/1-3/20-0-0. Анализатор по какой-то причине разбивает его на две части.

word;   Word, all letters;   ЦИК
file;   File or path name;   /1-3/20-0-0

Я проверяю запрос.

SELECT alias, description, token FROM ts_debug('russian','ЦИК/1-3/20-0-0')

Более того, если в начале присутствуют латинские буквы, то он анализирует анализатор правильно. оставляет целое слово целым. Я попытался изменить конфигурацию следующим образом.

CREATE TEXT SEARCH CONFIGURATION russian_test (PARSER  = pg_catalog.default )
ALTER TEXT SEARCH CONFIGURATION russian_test
ALTER MAPPING
  FOR  asciiword, word, numword, asciihword, hword, numhword, hword_asciipart, hword_part, hword_numpart, email, blank, file
  WITH russian_stem;

Какие бы варианты я ни использовал, слово всегда делится на две части. Можно ли получить правильную обработку алфавита кириллицы c с анализатора?

1 Ответ

1 голос
/ 23 января 2020

Это делается парсером до любой обработки словаря, и есть только один парсер. Вы можете написать новый синтаксический анализатор в C, но это, вероятно, слишком сложно.

Ваш лучший вариант - использовать словарь тезаурусов , чтобы исправить нанесенный урон.

Словарь будет содержать

ЦИК /1-3/20-0-0 : ЦИК/1-3/20-0-0'
...