0

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

谢谢!!

4

1 回答 1

1

您可以将SOUNDEX用于 mysql。我们已经尝试过,但我可以说它效果不佳,而且它也使搜索有点慢。

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

我们所做的如下:

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

    IdToUpdate 操作 DateTime IsSynced

    操作将是创建、更新、删除。IsSynced 将判断更新是否推送到 ES。

  • 然后添加一个玉米作业,该作业将查询该表中所有已同步设置为“0”的行,将这些 ID 和操作添加到 RabbitMQ 之类的队列中。并将这些 ID 的 ISSynced 设置为 1

    使用 RabbitMQ 的原因是它会确保将更新转发给 ES。如果失败,我们总是可以重新排队对象。

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

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

您还可以查看 ES 的Fuzzy Search来处理错字

还有完成建议,它也支持模糊搜索。

于 2017-01-23T15:27:20.177 回答