【发布时间】:2016-12-19 11:40:54
【问题描述】:
我目前正在尝试使用 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 在文档中所描述的,它目前确实支持数组,因此“查询”的内容将是:
Flashlight 会抛出错误,因为它希望“查询”包含“匹配”字段,而不是它们的数组的索引。
我将如何解决这个问题?我希望能够基于多个字段进行搜索。
【问题讨论】:
-
通常当你有一个数组并想要对其进行“包含”操作时,你实际上应该使用一个集合。请参阅my answer here,这也解释了为什么您应该将这些类别拉到顶级列表中。
-
由于 Flashlight 只是将该查询传递给 ES,因此 ES 会抱怨格式。我不是 ES 语法专家,但我以前从未见过该结构中的查询。您如何验证它是否像您在 ES 中编写的那样工作? [这是我看到的多个字段匹配的内容](elastic.co/guide/en/elasticsearch/reference/2.3/…
标签: ios arrays swift firebase firebase-realtime-database