【问题标题】:How to efficiently search a database table for all combinations of sub-strings in a piece of text?如何有效地在数据库表中搜索一段文本中子字符串的所有组合?
【发布时间】:2018-01-27 14:48:25
【问题描述】:

如果我有一个包含数十万个标签/关键字的 MySQL 表,以及用户提供的任意大小的文本,那么从这段文本中提取所有关键字的最有效方法是什么(关键字可以是一个或多个单词)存在于数据库表中?

我正在寻找一种有效的算法/策略。

例如,请考虑以下随机段落:“8 月 21 日是美国大日食,这是自 1979 年以来第一次触及美国大陆的日全食,也是自 Reddit 创建以来的第一次。我们需要您的帮助来收集关于为了科学,动物对日食有何反应!???? 了解如何在 cmets 中提供帮助。”

考虑到“八月”、“美国大日食”、“日食”、“美国”、“科学!”都是数据库表中现有的标签,我需要一种方法来有效地从数据库中返回所有标签。

任何建议都会有所帮助。

【问题讨论】:

标签: mysql database algorithm optimization


【解决方案1】:

全文索引可能是一个常见的建议,但在这种情况下它不会有帮助,因为您试图在 input 中查找关键字,而不是在已经被索引的文本中。您正在做的相反在许多索引文档中搜索一个词。

你可以这样搜索:

SELECT t.tag
FROM tags AS t
WHERE ? LIKE CONCAT('%', t.tag, '%')

您将用户输入的段落绑定到参数占位符?

会很慢。这可能需要 10-30 秒,具体取决于服务器的马力和其他并发负载。

但好消息是每次输入您只需执行一次此操作(如果您将结果保存在多对多表中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多