SQL字符串模糊匹配。数组还是连接?

时间:2018-06-07 16:05:19

标签: sql postgresql string-matching

我有一个相当大的地方列表,其中很多都有多个名字。我想对它们实施模糊搜索。

将所有名称连接成一个字符串或将它们全部放在数组中更好吗?

级联

--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,因此%模糊匹配字符串。

1 个答案:

答案 0 :(得分:0)

我不确定这对你来说是不是一种矫枉过正,但我​​有类似的任务,使用pg_trgm扩展匹配一些描述。问题也类似 - 有可能对一个案例有更多描述。

经过一些测试后,我创建了解决方案,每个案例创建一个连接字符串,构造为给定案例的所有描述中的不同字列表。

我测试这个唯一描述与给定搜索字符串的“相似性”。 trigram的问题是多次包含相同单词的字符串与测试字符串的相似度较低,然后描述只包含不同的单词....

更为精确的是,我最后还预先处理了“搜索字符串”以删除可能重复的单词甚至从中删除......人们有时会输入令人难以置信的东西......: - )