带有输入错误的MySQL搜索
在我的MySQL数据库中,我有一个用户表。我需要在您键入用户名字段时执行搜索。关于这个话题,很少有非常古老的问题。我测试了mysql的内置全文搜索功能,但没有达到预期效果(它不会处理打字错误)[我知道,但我还是尝试了]。 我最好的选择是什么?我认为现在应该有一个简单的解决办法。我正在考虑在elasticsearch上复制用户表并从那里进行即时搜索,但我真的希望避免这将导致的同步噩梦 谢谢 您可以使用mysql。我们已经尝试过了,但是我可以说它没有那么好用,而且它也使得搜索速度有点慢 我们有一个类似的问题,并切换到ES 我们所做的工作如下:带有输入错误的MySQL搜索,mysql,search,
elasticsearch,instant,Mysql,Search,
elasticsearch,Instant,在我的MySQL数据库中,我有一个用户表。我需要在您键入用户名字段时执行搜索。关于这个话题,很少有非常古老的问题。我测试了mysql的内置全文搜索功能,但没有达到预期效果(它不会处理打字错误)[我知道,但我还是尝试了]。 我最好的选择是什么?我认为现在应该有一个简单的解决办法。我正在考虑在elasticsearch上复制用户表并从那里进行即时搜索,但我真的希望避免这将导致的同步噩梦 谢谢 您可以使用mysql。我们已经尝试过了,但是我可以说它没有那么好用,而且它也使得搜索速度有点慢 我们有一个类
- 为将同步到ES的表创建了触发器。这个 触发器将写入一个新表。这样一个表的列将 是: IdToUpdate操作日期时间已同步 操作将是创建、更新、删除。我会告诉你的 是否将更新推送到ES
- 然后添加一个corn作业,该作业将查询此表中所有将issynced设置为“0”的行,并将这些ID和操作添加到类似RabbitMQ的队列中。并将这些ID的ISSynced设置为1 使用RabbitMQ的原因是,它将确保将更新转发给ES。如果出现故障,我们总是可以对对象重新排队
- 编写使用者以从队列中获取对象并更新ES
还支持模糊搜索。如果用户名是单个单词,您可以尝试。我们也遇到了同样的问题,转而使用弹性搜索,它完全值得同步,因为它从数据库中获得了巨大的负载(在我的情况下为30%),谢谢,但我认为soundex不够好。你能简单描述一下你是如何进行同步的吗?你怎么能保证两个分贝在长时间后对齐?这有点乏味。在DB上,我们在ES索引中的表上创建了一个触发器。此触发器将添加更改的行的所有id,并将id存储在表中。我们创建了一个cron作业,该作业将读取该表并将id发送到rabbitmq上的队列。我们使用了一个队列,以便它能够抵抗失败。并编写了一个消费者,将更新ES中的索引。我们的表通常更新率很低(每秒更新5次)。如果更新/插入太大,那么这将很困难谢谢,我正在考虑使用相同的方法。我也有类似的更新/插入速率