Конфигурация PostgreSQL tsvector: как разрешить специальные символы? - PullRequest
12 голосов
/ 29 мая 2011

Я установил новую конфигурацию текстового поиска в PostgreSQL. Эта конфигурация использует пустой файл стоп-слов, DictFile и AffFile.

Простой тест ...

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

... работает (почти) нормально, за исключением того факта, что лексемы для C ++ и C # оба являются "C". По сути, все, что я хотел бы сделать, это убедиться, что лексема для «C ++» - это «C ++», а лексема для «C #» - «C #», что позволяет пользователю запрашивать «C ++».

1 Ответ

4 голосов
/ 02 июня 2011

Проблема двоякая.

  1. Первая проблема связана с индексацией.Конфигурация по умолчанию использует stemming для индексации данных, и поэтому вы получаете лексему «C» для «C ++» и «C #».Вы можете использовать «простую» конфигурацию для индексации данных, но тогда вы получите нежелательные слова в индексе.Что я сделал, так это конвертировал «C ++» в «Cplusplus» и индексировал его.Поскольку «Cplusplus» не имеет лексемы, он будет индексирован как есть.Вы можете сделать то же самое для «C #», указав в данных индекса «CSharp».

  2. Вторая проблема связана с поиском.Теперь, когда с индексированными данными все в порядке, мы должны убедиться, что мы конвертируем условия поиска для специальных слов.Если пользователь вводит «C ++», вам необходимо преобразовать его в «Cplusplus» перед выполнением поиска.

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

Я некоторое время не использовал TSearch, поэтому я не уверен, что TSearch позволяет вам настраивать и выводить список исключений так же, как он допускает стоп-слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...