加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – levenshtein替代方案

发布时间:2021-03-15 03:30:01 所属栏目:MySql教程 来源:网络整理
导读:我有一大堆查询并使用levenshtein计算拼写错误,现在levenshtein导致mysql占用完整的cpu时间. 我的查询是UNION语句中的全文搜索levenshtein. sql1是我当前的查询,sql2只是全文搜索,这是快速的,并没有使用太多的CPU时间,最后一个leventhein一个将达到峰值! 你

我有一大堆查询并使用levenshtein计算拼写错误,现在levenshtein导致mysql占用完整的cpu时间.
我的查询是UNION语句中的全文搜索levenshtein.
sql1是我当前的查询,sql2只是全文搜索,这是快速的,并没有使用太多的CPU时间,最后一个leventhein一个将达到峰值!

你们中的任何人都有另一种方式来获取拼写错误吗?
请不要回答规范化数据,我已经想到了,但不适用于我的数据,因为我不能预先进行匹配/计算并创建一个带索引的单独表.

            $sql1 = "(SELECT * FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='' AND MATCH(prop_value) AGAINST ('+usama bin laden' IN BOOLEAN MODE)) UNION (SELECT s.* FROM (SELECT levenshtein(prop_value,'usama bin laden') AS dist,sanction_id,prop_type,prop_value FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='') s WHERE dist < 3) ORDER BY sanction_id";

        $sql2 = "SELECT * FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='' AND MATCH(prop_value) AGAINST ('+usama bin laden' IN BOOLEAN MODE) ORDER BY sanction_id";

        $sql3 = "SELECT s.* FROM (SELECT levenshtein(prop_value,prop_value FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='') s WHERE dist < 3";
最佳答案 如果你只与MySQL绑在一起,那就没有一个简单的解决方案.

通常使用专门的ngram索引进行快速候选查找过滤,然后仅在10-50个候选者上计算levensthein,这比计算所有对的levensthein更快.

像Solr / Lucene这样的专业全文搜索引擎内置了这个.

PostgreSQL有一个pg_trgm contrib模块(http://www.postgresql.org/docs/9.0/static/pgtrgm.html),就像一个魅力.

您甚至可以使用全文索引在MySQL中模拟这一点,但您必须从所有文档中收集单词,将它们转换为ngrams,在它们上创建全文索引,并将它们全部破解以便快速查找.这带来了各种麻烦,冗余,同步……不值得你花时间.

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读