MySQL 搜索有错别字

MySQL search with typo

在我的 MySQL 数据库中,我有一个用户 table。当您在用户名字段中输入错字时,我需要执行搜索。关于这个话题很少有非常古老的问题。我测试了 mysql 的内置全文搜索,但它没有按预期工作(它不处理拼写错误)[我知道,但我还是试过了]。 我最好的选择是什么?我认为现在应该有一个简单的解决方案。我正在考虑在 elasticsearch 上复制用户 table 并从那里进行即时搜索,但我真的很想避免这将导致的同步噩梦。

谢谢!!

您可以将 SOUNDEX 用于 mysql。我们已经尝试过了,但我可以说它的效果不是很好,而且还会使搜索速度变慢。

我们遇到了类似的问题并切换到 ES。

我们所做的如下:

  • 为将同步到 ES 的 table 创建了一个触发器。这 触发器将写入新的 table。这样的 table 的列将 是:

    IdToUpdate Operation DateTime IsSynced

    操作将是创建、更新、删除。 IsSynced 会告诉 更新是否推送到ES.

  • 然后添加一个 corn 作业,查询此 table 所有将 i​​ssynced 设置为“0”的行,将这些 ID 和操作添加到 RabbitMQ 之类的队列中。并将这些 ID 的 ISSynced 设置为 1

    使用 RabbitMQ 的原因是它将确保将更新转发到 ES。如果失败,我们总是可以 re-queue 对象。

  • 写一个消费者从队列中获取对象并更新ES。

除此之外,您还必须创建一个实用程序,用于从数据库创建 ES 索引以供首次使用。

您还可以查看 Fuzzy Search 的 ES 来处理拼写错误

还有Completion suggester也支持模糊搜索。