MySQL-在大文本中使用空格匹配关键字



我们有一个关键字数据库,例如:

1 | MySQL
2 | Database Developer
3 | Software Engineer
4 | Director of Development

我们需要一种快速的方法来扫描一大组文本(比如基础文本中的简历(,以匹配这些带有空格的确切单词。

诚然,我们扫描的大多数文本都超过了1000个字符,可能是这样的:

I am a Senior Software Engineer with Director of Development experience specializing in JavaScript, JSON, and Web Development. I also have Management experience and have worked in Banking, Cloud, and custom CRM development environments. I am also familiar with .NET and Kittens.

但它们必须是完全匹配的;例如我们想要";发展总监";匹配而不是"匹配";主任;或";"发展";他们自己。

现在我们使用的REGEXP是这样的:

SELECT
*
FROM
sit_keyword sk
WHERE
@large_resume_text REGEXP CONCAT('\b',sk.keyword,'\b');

它工作得很好,但速度很慢,而且有+和-的问题。但它是有效的——匹配关键字的全文,而不仅仅是其中的一部分

然而,最快的方法是使用MATCH对抗。请注意,sit_keyword表有一个FULLTEXT索引。

例如

SELECT
*
FROM
sit_keyword sk
WHERE
MATCH(sk.keyword) AGAINST (@large_resume_text);

问题是MATCH反对系统将MATCH(col1(中的单词分解为单独的单词。例如";软件工程师";将返回一个与文本相匹配的词;软件";或";工程师";处于反对目标中。即使我们在col1关键字周围加引号,也是一样的。这导致我们的MATCH ANTIFY删除了不匹配的关键字。

我们如何才能强制MATCH AGAINST将整个MATCH(col1(值与目标文本匹配,而不是将col1中的单个单词匹配?

WHERE MATCH(resume) AGAINST ("+Director +Development" IN BOOLEAN MODE)
AND resume LIKE "%Director of Development%"

注:

  • 删除短于为FULLTEXT索引建立的最小单词长度的单词
  • 删除任何";停止";单词(如the(
  • +放在其他单词上
  • MATCH应该很快,但(正如你所说(不够。添加LIKE以过滤掉其余部分

相关内容

  • 没有找到相关文章

最新更新