【问题标题】:SQL String Fuzzy Matching. Array or Concatenation?SQL 字符串模糊匹配。数组还是串联?
【发布时间】:2018-11-17 15:14:57
【问题描述】:

我有一个相当大的地点列表,其中许多有多个名称。我想对它们进行模糊搜索。

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

串联

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

【问题讨论】:

    标签: sql postgresql string-matching


    【解决方案1】:

    我不确定这对你来说是否过分,但我有类似的任务,使用 pg_trgm 扩展匹配一些描述。问题也很相似——一个案例可能有更多描述。

    经过一些测试,我创建了解决方案,该解决方案为每种情况创建一个连接字符串,该字符串构造为来自给定情况的所有描述的不同单词的列表。

    我测试了这个独特描述与给定搜索字符串的“相似性”。 trigram 的问题是多次包含相同单词的字符串与测试字符串的相似率低于仅包含不同单词的描述......

    更准确地说,我最后还对“搜索字符串”进行了预处理,以删除可能的重复单词……人们有时会输入令人难以置信的东西……:-)

    【讨论】:

    • 我不希望所有名字都相似,我只需要看看是否至少有一个匹配。
    猜你喜欢
    • 2012-02-14
    • 2014-11-02
    • 1970-01-01
    • 2018-05-31
    • 2021-04-19
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多