Александр, руководствуйтесь здравым смыслом - что проиндексируете, то
и найдете. Никакой магии внутри у нас нет, все отдано здесь на откуп
пользовательскому словарю. Если вы хотите различать 'е' и 'ё', то
напишите
словарь-враппер (давно всем предлагаю) вокруг испелла, который
опционально
возвращает нормализованные формы и/или оригинальное слово. Его вы
используете
пи индексации, а при поиске одну из конфигураций - со словраем, который
понимает 'ё', который не понимает. Но обычно, просто используйте нечто
вроде to_tsvector(translate(string,'ё','е')) и не будет никаких проблем.
Олег
Олег
On Mon, 15 Dec 2008, "Александр В. Сизов" wrote:
Hello, world!
Решил поэкспериментировать в FreeBSD6.3 под PostgreSQL 8.3.5 (+ICU) с
FTS. В качестве словаря выбрал Ispell 0.99g5, собрал с поддержкой
'ё'. Сразу возникла проблема: 'самолёт' @@ 'самолет' = false. Ок,
пересобрал без поддержки 'ё' => 'самолёт' @@ 'самолет' = false. Ок,
собрал, распарсил, вырезал ё руками (ни в одной строчке не оставил
'ё') - 'самолёт' @@ 'самолет' = false, при этом 'самолёты',
'самолётами', ... нормально приводятся к каноническому виду (как???).
Привожу код:
-------------------------------------------------------- CUT
CREATE SCHEMA library;
CREATE TEXT SEARCH DICTIONARY library.ispell_ru (
TEMPLATE = ispell,
DictFile = ispell_ru,
AffFile = ispell_ru,
StopWords = russian
);
CREATE TEXT SEARCH CONFIGURATION library.russian (
COPY = russian
);
ALTER TEXT SEARCH CONFIGURATION library.russian
ALTER MAPPING FOR hword, hword_part, word
WITH library.ispell_ru, russian_stem;
ALTER TEXT SEARCH CONFIGURATION library.russian
DROP MAPPING FOR
email,
file,
float,
host,
sfloat,
url,
url_path,
version;
-------------------------------------------------------- CUT
На время, чтобы на долго не застревать, написал функции, подменяющие
ё->е в поиске и записи в БД, но хотелось бы понять и решить проблему...
WBR!
Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83