gpt4 book ai didi

ios - Swift、Firebase、Flashlight,如何存储数组?

转载 作者:行者123 更新时间:2023-11-30 12:49:12 25 4
gpt4 key购买 nike

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

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

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 会抛出错误,因为它期望“查询”包含“匹配”字段,而不是它们数组的索引。

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

最佳答案

从技术上讲,Flashlight 根本不关心您在 body 标记中放置的内容;它只是将其传递给 ElasticSearch。因此,如果生成有关格式的错误,则由 ElasticSearch 进行提示。

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

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

如果问题出在 ES 语法(在我看来),那么您只需直接针对 ES 运行查询,直到它们起作用,然后修改您的客户端以相应地提交正确的语法。

关于ios - Swift、Firebase、Flashlight,如何存储数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41221802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com