例如,想象一下由Firebase支持的博客,博主可以使用标签标记帖子。当博主正在为新帖子添加标签时,如果他们可以看到与他们输入的前几个按键匹配的所有当前存在的标签,那将会很有帮助。因此,如果“blog”、“black”、“blazing saddles”和“bulldogs”是标签,如果用户键入“bl”,则会得到前三个标签,但不包括“bulldogs”。
我的初步想法是,我们可以根据标签设置优先级,并使用startAt来查询,这样我们的查询看起来会像这样:
fb.child('tags').startAt('bl').limitToFirst(5).once('value', function(snap) {
console.log(snap.val())
});
但这也会返回“bulldog”作为结果之一(虽然不是致命的,但也不是最好的)。使用startAt('bl').endAt('bl')没有返回结果。还有其他方法可以实现吗?
(我知道其中一个选项是我们可以使用搜索服务器,如ElasticSearch,参见https://www.firebase.com/blog/2014-01-02-queries-part-two.html,但我希望尽可能多地保留在Firebase中。)
编辑
正如Kato建议的那样,这里有一个具体的例子。我们有20,000个用户,他们的名字存储如下:
/users/$userId/name
通常,用户会通过姓名查找其他用户。当用户查找他们的好友时,我们希望出现一个下拉菜单,列出那些名字以搜索者输入的字母开头的用户列表。因此,如果我输入了“Ja”,我期望在下拉菜单中看到“Jake Heller”、“jake gyllenhaal”、“Jack Donaghy”等。