所以我有一个存储在postgres数据库中的用户列表,我想在我的(Java)后端上按用户名搜索它们,并在前端向用户显示一个被截断的列表(例如facebook用户搜索)。当然可以在SQL中使用
WHERE username = 'john smith';
但是我希望搜索算法更加复杂。例如,从未命中开始
"Michael" ~ "Micheal"
并可能会改进它以使用上下文,例如地理邻近性。
我已经做过很多次了,我觉得自己会重新发明轮子并且做得不好。有图书馆这样做吗?应该在后端(在Java中)还是在数据库(Postgresql)中进行处理。如何使该模型具有可扩展性(即使用易于添加复杂性的模型)?
最佳答案
复杂的算法不会神奇地出现,您必须实现它。最后一个问题是您应该使用Java还是在数据库中执行此操作。在绝大多数情况下,最好使用数据库进行查询。诸如"Michael" ~ "Micheal"
或空间查询之类的东西是许多现代SQL数据库中的标准功能。您只需要实现适当的SQL查询即可。
但是,还有一点是,SQL数据库是否适合“复杂查询”。您还可以考虑使用诸如Elasticsearch之类的替代方法。