我有一个相当大的地方列表,其中很多都有多个名字。我想对它们实施模糊搜索。
将所有名称连接成一个字符串或将它们全部放在数组中更好吗?
级联
--table definition
CREATE TABLE places_concat(
id serial,
name varchar(200),
all_names varchar(10000),
...
);
--sql query
select name from places where 'kugluktuk' % all_names;
阵列
--table definition
CREATE TABLE places_array(
id serial,
name varchar(200),
all_names text[],
...
);
--sql query
select name from places where 'kugluktuk' % any(all_names);
(我使用带有pg_trgm扩展名的postgres 10,因此%
模糊匹配字符串。
答案 0 :(得分:0)
我不确定这对你来说是不是一种矫枉过正,但我有类似的任务,使用pg_trgm扩展匹配一些描述。问题也类似 - 有可能对一个案例有更多描述。
经过一些测试后,我创建了解决方案,每个案例创建一个连接字符串,构造为给定案例的所有描述中的不同字列表。
我测试这个唯一描述与给定搜索字符串的“相似性”。 trigram的问题是多次包含相同单词的字符串与测试字符串的相似度较低,然后描述只包含不同的单词....
更为精确的是,我最后还预先处理了“搜索字符串”以删除可能重复的单词甚至从中删除......人们有时会输入令人难以置信的东西......: - )