【发布时间】:2016-04-03 12:57:31
【问题描述】:
我想在Firebase 的用户名中实现前缀搜索。通过前缀搜索,我的意思是在执行查询 foo 后,将返回带有 prefix foo 的用户名。这样的结果可能会返回所有带有prefix foo 的用户名,或者只返回一些存储在数据中的special subset,但重要的是,如果存在这样的用户名,它必须包含与精确查询匹配的用户名。
由于Firebase 数据结构只是一个自定义的可设计树,我的第一个想法是在所有用户名的集合上实现trie data structure。
更详细地说,从根到树的任何节点的每条路径都对应于一些现有用户名的唯一前缀。然后在每个节点中,如果存在这样的用户名,除了与该节点匹配的用户名外,我们还可以显式存储一些用户名子集,前缀对应于该节点。这使我们能够非常快速地返回具有给定前缀的所有用户名的子集。
当添加或删除用户名时,可以轻松更新此类树。我的想法是,存储在节点中的用户名子集可以根据一些外部数据定期更新,这允许使用某种度量返回更有价值的结果。
我想知道是否有其他推荐的方法来实现目标,尤其是Firebase?对上述方法的任何意见也值得赞赏。
【问题讨论】:
-
@Hardik Sondager 的回答提供了一些不错的选择。您也可以生成自己的。查看Searching in Firebase without server side code的答案
-
@Jay 谢谢,似乎 queryStartingAtValue 和 queryEndingAtValue 的组合就足够了,因为字符串是按字典顺序排列的,我只需要前缀搜索。
标签: search data-structures firebase