PostgreSQL 上的全文搜索失败
Full text search failure on PostgreSQL
我有一个用于索引文本内容的 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
但是如果我尝试 运行 查询以获得 manual 的复数形式或单数形式(在意大利语中:manuale 是一,manuali是2个或更多)它失败了:
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manuali'::tsquery;
return 没什么
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manuale'::tsquery;
return 没什么
如果我准确地写在搜索向量字段中的内容,它只会 return 记录:
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manual'::tsquery;
有什么问题吗?
问题可能是参数default_text_search_configuration
没有设置为italian
,所以使用了不同的词干算法。
明确并使用 to_tsquery('italian', 'manuali')
而不是 'manuali'::tsquery
。
我有一个用于索引文本内容的 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
但是如果我尝试 运行 查询以获得 manual 的复数形式或单数形式(在意大利语中:manuale 是一,manuali是2个或更多)它失败了:
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manuali'::tsquery;
return 没什么
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manuale'::tsquery;
return 没什么
如果我准确地写在搜索向量字段中的内容,它只会 return 记录:
SELECT "DocumentFileID"
FROM public."DocumentFiles"
where "SearchVector"::tsvector @@ 'manual'::tsquery;
有什么问题吗?
问题可能是参数default_text_search_configuration
没有设置为italian
,所以使用了不同的词干算法。
明确并使用 to_tsquery('italian', 'manuali')
而不是 'manuali'::tsquery
。