使用Swift使用Firebase进行多个标记搜索

时间:2017-03-23 18:26:39

标签: swift search firebase firebase-realtime-database tags

我试图了解如何根据多个代码从Firebase数据库中检索数据。让我们考虑以下数据结构:

{
    "posts":{
        "post1":{
            "title":"First post",
            "description":"that's a nice post",
            "tag": ["tag1","tag2","tag3"]
        },
        "post2":{
             "title":"Second post",
             "description":"the best post",
             "tag": ["tag4","tag5","tag6"]
        },
        "post3":{
            "title":"Third post",
            "description":"cool post",
            "tag": ["tag5","tag80","tag90"]
        }
    }
}

每个帖子都有标题,描述和任意大小的标签数组。

我的目标是仅向用户显示具有特定标签的帖子。例如,我可以搜索tag1和tag4,然后我想向用户显示post1和post2。或者搜索tag1和tag5,然后必须显示所有三个帖子。

每篇文章中的标签不是预定义的关键字,它们可以是任何可能的单词,因为也可能是用户设置这些标签的情况。所以我可能会搜索tag100,但数据库中没有任何内容。

我见过几个相似的帖子,但我无法适应这种情况。你能给我一些关于处理这个问题的最佳策略的提示吗?

1 个答案:

答案 0 :(得分:3)

我建议为“标签”创建一个单独的结构,如下所示:

{
    "posts":{
        "post1":{
            "title":"First post",
            "description":"that's a nice post",
            "tag": ["tag1","tag2","tag100"]
        },
        "post2":{
             "title":"Second post",
             "description":"the best post",
             "tag": ["tag2","tag3","tag100"]
        }
        // more posts...
    },
    "tags":{
        "tag1": ["post1"],
        "tag2": ["post1","post2"],
        "tag3": ["post2"],
        "tag100": ["post1","post2"]
    }
}

这样,每次添加帖子时,都可以从新帖子中获取标签,并检查它们是否存在于“标签”结构中。如果标签已经存在,只需将帖子推到阵列的末端即可。如果标记不存在,则创建该标记属性并将该帖子作为值添加到数组中。

当您在将来查找包含任何搜索标记的帖子时,您只需要进入“标记”结构,找到包含搜索到的标记名称的任何数组,使用这些帖子标题来获取特定帖子,然后您就可以了在路上。

注意:要向代码数组("posts""tags"结构中)添加值,您应该使用文档here中描述的.push()功能

希望这有帮助!