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