【发布时间】:2021-09-07 06:21:35
【问题描述】:
我有一个包含 267,751 个单词的 MySQL 表。我尝试找到最快的方法来查找字谜,而不必为每次搜索都搜索整个表格,这将是非常低效的。
为了清楚起见:字谜是通过改变另一个单词的字母顺序而组合在一起的单词。
我想出了一个方法,我创建了一个新列,其中所有单词中的字母按字母顺序排序。在进行搜索之前,我按字母顺序对搜索词中的字母进行排序,然后在新列中进行搜索。事实证明,这种方法对于精确的字谜(具有相同字母数的单词)非常快。
问题在于找不到确切的字谜。但是要找到字谜,你可以少一个字母,少两个字母,少三个字母,一直到两个字母。突然有很多组合,平均搜索时间大约需要 0.5 秒,这很糟糕。
那里有很多字谜搜索引擎,所以这应该不难,但我想不出一个有效的方法来做到这一点。有没有人有任何想法?他们是如何做到这么快的?
谢谢
【问题讨论】:
-
我不确定在 MySQL 中是否有任何有效的方法。
-
事实上,听起来在任何语言/数据库中都很难有效地做到这一点。似乎没有任何方法可以创建优化这一点的索引。
-
添加了通配符,这在sql中确实没有意义。加载程序中的所有单词并搜索它们。
-
@TylerMiles - 正则表达式高尔夫:alf.nu/RegexGolf
-
闻起来像拼字游戏助手?