根据查找表搜索字符串

时间:2018-12-27 18:58:18

标签: sql

我有一个包含关键字的查询表,例如第45街,小溪和帮派。我需要在叙事表的叙事栏中找到这些单词,并且输出需要是一个单独的表。单独的表需要具有完整的叙述,标识记录/编号以及叙述所引用的关键字。没有什么可以将这两个表链接在一起。叙述表有超过2.3亿行。我如何有效地做到这一点?谢谢。

第一个表(查找表):

Name1 varchar(250)

数据示例:

41 Boyz 
1 percenter gang 
0.01 gang 
1000 blk boys 
1000 blk boyz 
1000 blk crew 
1000 blk SMT 

第二张表(叙述表):

IncidentID: float
Narrative: varchar(max)

我需要找到叙事表记录,其中叙事列的内容会击中查找表中的单词。结果应该在第三个表中,并且应包含IncidentID,Narrative(均来自表2)和Name1(来自表1-查找表)。查找词可以在叙述字段的任何地方找到。

输出为:

Incident ID: 123145

Narrative: The officer came to the location of the 0.01 gang and met with the suspect.

Name1: 0.01 gang

1 个答案:

答案 0 :(得分:0)

这里是情况:

  • 您有2.3亿行。
  • 您正在按任意顺序字母大写甚至是缩写的形式查找文章中的多个单词
  • 您可能想在合理的时间中找到匹配项。更快,最好。这是一个在线查询吗?
  • 如果没有完整的匹配项,您可能希望找到部分匹配项。
  • 您可能希望根据单词的接近程度以及它们是否顺序出现来对匹配进行排序。也许检查大小写,缩写等。

这时,您需要使用“全文搜索”解决方案。我通常推荐PostgreSQL数据库,因为该功能是完全免费的。

您将需要尝试一些示例,然后您将很快想到。简而言之,步骤是:

  1. 插入文本叙述。
  2. 执行叙述的索引。可能要花几分钟或几小时,具体取决于数据量。
  3. 然后搜索很多次,产生快速的[可能排名]的结果。

稍后,如果您更新叙述,则可能需要对新的/已修改的条目进行索引编制。这应该更快。