У меня есть PostgreSQL, используемый для индексации текстового содержимого. Столбец SearchVector успешно создан с использованием следующего кода
UPDATE public."DocumentFiles"
SET "SearchVector" = setweight(to_tsvector('pg_catalog.italian', coalesce("DocumentFileName", '')), 'A')
|| setweight(to_tsvector('pg_catalog.italian', coalesce("DocumentFileDescription", '')), 'B')
|| setweight(to_tsvector('pg_catalog.italian', coalesce("DocumentFileContentString", '')), 'B')
WHERE "DocumentFileID" = 123;
Содержимое выглядит следующим образом:
'011989':1A '5':7A 'cdp':2A 'contonu':10A 'elettr':6A 'grupp':8A 'impiant':5A 'manual':3A 'uso':4A
Но если я попытаюсь выполнить запрос, чтобы получить множественное или единственное число руководство по эксплуатации (по-итальянски: руководство равно единице, руководство равно 2 или более), произойдет сбой:
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manuali'::tsquery;
ничего не возвращать
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manuale'::tsquery;
ничего не возвращать
Он возвращает запись только в том случае, если я пишу именно то, что написано в поле searchvector:
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manual'::tsquery;
Что с этим не так?
@a_horse_with_no_name, это тот же синтаксис. Я получаю то же поведение с "... где "SearchVector" @@ to_tsquery('pg_catalog.italian','manuale');"
'manual' contains 'manuali'
неверно, так почему вы ожидаете совпадения?
@kendle, потому что «manuali» — это множественное число слова «manuale». Поэтому он должен возвращать результат для обоих из них
Проблема, вероятно, в том, что параметр default_text_search_configuration
не установлен в italian
, поэтому используется другой алгоритм стемминга.
Будьте откровенны и используйте to_tsquery('italian', 'manuali')
, а не 'manuali'::tsquery
.
Скорее всего, это не связано с вашей проблемой: но зачем приведение
::tsvector
, если столбец ужеtsvector
? У меня нет большого опыта работы с FTS, но разве вам не нужно также предоставлять язык для tsquery?@@ to_tsquery('pg_catalog.italian', 'manuale')