首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift,Firebase,Flashlight,如何存储数组?

Swift,Firebase,Flashlight,如何存储数组?
EN

Stack Overflow用户
提问于 2016-12-19 19:40:55
回答 2查看 329关注 0票数 0

我目前正在尝试使用Firebase、Flashlight和Swift创建一个搜索函数,以便从我的实时数据库中检索随机对象。

我正在尝试对位于/search/request的Firebase执行以下查询

代码语言:javascript
复制
var searchSettings : [Any] = []

    if Settings.searchPackage != 99 {
        searchSettings.append(["match" : Settings.searchPackage])
    }

    if Settings.searchCountry != .world {
        if let region = Locale.current.regionCode {
            searchSettings.append(["match" : region])
        }
    }

    if Settings.searchGender != .All {
        searchSettings.append(["match" : Settings.searchGender.rawValue])
    }

    let postData = [
        "index" : "firebase",
        "type" : "test",
        "body" : [
            "query" : searchSettings
        ]
    ] as [String : Any]

    ref.setValue(postData, withCompletionBlock: { (error, reference) in
        if error == nil {
            FIRDatabase.database().reference().child("search/response").child(ref.key).observeSingleEvent(of: .childAdded, with: { (snapshot) in

                if snapshot.exists() {
                    print("found random snapshot based on settings \(snapshot)")
                }
            })
        }

    })

问题是,正如Firebase文档中所描述的,它目前支持数组,因此"query“的内容将是:

Flashlight将抛出一个错误,因为它期望"query“包含"match”字段,而不是它们数组的索引。

我该怎么解决这个问题?我希望能够基于多个字段进行搜索。

EN

回答 2

Stack Overflow用户

发布于 2016-12-20 06:32:12

从技术上讲,Flashlight根本不关心您在body标记中放了什么;它只是将它传递给ElasticSearch。因此,如果生成了关于格式的错误,则是ElasticSearch发出了抱怨。

你在这里可能遇到的情况是: a) ElasticSearch不喜欢这种语法,或者Firebase的array-like behaviors正在将数组转换为对象。

请注意,Flashlight将允许您传递一个JSON字符串来代替body。因此,如果这是类似数组的行为的结果,您可以在将查询传递到ES之前使用JSON.stringify(),它将按预期从另一端传出。

如果问题出在ES语法上(就像我看到的那样),那么您可以直接对ES运行查询,直到它们正常工作,然后修改您的客户端以相应地提交正确的语法。

票数 0
EN

Stack Overflow用户

发布于 2017-03-16 17:29:23

看看这个要点:BodyQuery in Swift

我在我的Android应用程序项目中编写了这段代码,并使用它为ES构建查询。Here is equivalent in Java for Android ElasticSearch需要一个json查询,您可以使用地图(安卓)/Dictionaries (iOS)轻松创建它。享受:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41221802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档