Postgres 9.5
全文搜索在测试环境中正常运行,但在生产中存在问题:当我查询特定单词(如城市的名称或标题)时,它找不到任何内容。只有俄语的问题。我想,有些配置设置或编码设置有问题。
我用两种语言存储信息:英语和俄语。
这是为了使用全文搜索而创建的表格:
CREATE TABLE public.tsv
(
name character varying NOT NULL,
id uuid NOT NULL,
tsv tsvector NOT NULL,
image boolean DEFAULT false,
source uuid,
"user" uuid,
CONSTRAINT tsv_pkey PRIMARY KEY (id),
CONSTRAINT source FOREIGN KEY (source)
REFERENCES public.source (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.tsv
OWNER TO postgres;
这是我用于搜索的查询示例:
select id, name, image, type from tsv where tsv @@ to_tsquery('russian', 'кант') limit 18
搜索人名“кант”(俄语单词 - 来自伊曼纽尔康德 - 哲学家)
此查询在测试环境中正确返回此行:
"Кант – Пол Стретерн";
"2779061c-3b58-4684-890c-cc24e8f5cdc0";
"'1724–1804 –':7 '«долга»':42 '«категорическ':44 'Аристотел':18 'Имману':5 'Кант':1A,6,24,46 'Платон':16 'Пол':3A 'Стрем':19 'Стретерн':4A 'Философ':41 'границ':21 'действительн':33 'императива»':45 'классическ':10 'крупн':13 'легкост':48 'лиш':35 'мыслител':14 'немецк':9 'определ':20 'опрокидыва':49 'основоположник':8 'позна':32 'познан':23 'получ':36 'представлен':40 'результат':54 'сам':12 'совершен':59 'спекулятивн':51 'стал':58 'субъективн':39 'теор':52 'указа':25 'философ':11,55 'человек':29 'человеческ':22 '–':2A";
"2779061c-3b58-4684-890c-cc24e8f5cdc0"
但完全相同的查询在生产中找不到完全相同的行。 Hovewer,如果我正在搜索普通单词(不是城市的名称或标题等),那么它会正确搜索。
这是生产数据库中的SQL窗格:
CREATE DATABASE production_v2
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
CONNECTION LIMIT = -1;
这是来自测试一:
CREATE DATABASE test_database
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
CONNECTION LIMIT = -1;
位于我的mac上的测试数据库,生产位于VPS(Debian)