2017-01-11 14 views
1

Я хочу разрешить поддержку многоязыкового поиска для своего приложения.с использованием to_tsvector и to_tsquery для фильтрации неязыковых символов

Postgresql 9.6 Search Controls говорит, что мне нужно tsvector и tsquery правильно разобрать/нормализовать текст. Это прекрасно работает с языками, основанными на романах, но не с неязыковыми персонажами.

Учитывая этот поиск фрагмент

where to_tsvector(title) @@ to_tsquery('hola') 

Ищу титул с «Голя ми Amiga», и он будет найден. Однако, учитывая:

where to_tsvector(title) @@ to_tsquery('你') //language = Chinese, Code = zh-CN 

Ищу титул с 你好嗎 и это не найдено.

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

ответ

1

Убедитесь, что вы установили конфигурацию правой

default_text_search_config (строка) Выбор конфигурации поиска текста, который используется этими вариантами функций поиска текста, которые не имеют явный аргумент, указывающий конфигурацию , Дополнительную информацию см. В главе 12. Встроенное значение по умолчанию - pg_catalog.simple, но initdb инициализирует файл конфигурации с параметром, соответствующим выбранному языку lc_ctype, если может быть идентифицирована конфигурация, соответствующая этому языку.

Вы можете видеть текущее значение с

SHOW default_text_search_config; 
or SELECT get_current_ts_config(); 

Вы можете изменить его на сессию с SET default_text_search_config = newconfiguration; Или, вы можете использовать ALTER DATABASE <db> SET default_text_search_config = newconfiguration

From Chapter 12. Full Text Search

Во время установки соответствующей выбрана конфигурация, а default_text_search_config устанавливается соответственно в postgresq l.conf. Если вы используете ту же конфигурацию текстового поиска для всего кластера, вы можете использовать значение в postgresql.conf. Чтобы использовать различные конфигурации в кластере, но с той же конфигурацией в любой базе данных, используйте ALTER DATABASE ... SET. В противном случае вы можете установить default_text_search_config в каждом сеансе.

Каждая функция поиска текста, которая зависит от конфигурации, имеет необязательный аргумент regconfig, так что используемая конфигурация может быть явно указана. default_text_search_config используется только тогда, когда этот аргумент опущен.

Вы можете использовать \dF, чтобы просмотреть найденные вами конфигурации поиска текста.

Так что вы хотите, это что-то вроде этого

where to_tsvector('newconfig', title) @@ to_tsquery('newconfig', '你') 

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

+0

Это китайский (код zh-CN) – Growler

+0

К сожалению, у меня нет решения для этого языка. Вам придется исследовать параметры конфигурации текстового поиска, если есть что-то, что можно сделать. Мое предположение заключается в том, что преимущества не будут такими, как на английском. AFAIK, в китайском однокостном кодексе для графемы, и вы передали всю лексему. FTS основана на использовании разницы. Но я никогда не работал с китайцами. –

+0

вы можете объяснить немного подробнее, в частности, «в китайском однокостном кодовом пункте для графемы, и вы передали всю лексему. ФТС как бы основана на использовании разницы»? Что вы имеете в виду? – Growler

 Смежные вопросы

  • Нет связанных вопросов^_^