MySQL搜索错误

时间:2017-01-21 18:12:35

标签: mysql search elasticsearch instant

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

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将SOUNDEX用于mysql。我们已经尝试过,但我可以说它不能很好地工作,它也会使搜索速度变慢。

我们有类似的问题并转而使用ES。

我们做的如下:

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

      

    IdToUpdate操作DateTime IsSynced

    操作将是创建,更新,删除。 IsSynced会说 是否将更新推送到ES。

  • 然后添加一个玉米作业,该作业将查询此表以查找将其设置为“0”的所有行,将这些ID和操作添加到像RabbitMQ这样的队列中。并为那些ID的

    设置ISSynced为1

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

  • 编写使用者以从队列中获取对象并更新ES。

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

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

同样Completion suggester也支持模糊搜索。