[英]Swift, Firebase, Flashlight, how to store arrays?
我目前正在嘗試使用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將引發錯誤,因為它希望“查詢”包含“匹配”字段,而不包含它們的數組索引。
我該如何解決? 我希望能夠基於多個字段進行搜索。
從技術上講,手電筒根本不關心您在body
標簽中放置的內容。 它只是將其傳遞給ElasticSearch。 因此,如果生成有關格式的錯誤,則抱怨的是ElasticSearch。
您可能在這里遇到的是:a)ElasticSearch不喜歡該語法,或者Firebase的類似於數組的行為將數組轉換為對象。
請注意,Flashlight將允許您傳遞JSON字符串代替body
。 因此,如果這是類似數組的行為的結果,則可以在將查詢傳遞給ES之前使用JSON.stringify()進行查詢,該查詢將按預期從另一端輸出。
如果問題是ES語法(在我看來是這樣),那么您可以直接針對ES運行查詢,直到它們起作用為止,然后修改您的客戶端以相應地提交正確的語法。
看看這個要點: Swift中的BodyQuery
我在Android應用程序項目中編寫了此代碼,並使用它來構建ES查詢。 這等效於Java for Android, ElasticSearch需要json查詢,您可以使用Maps(Android)/ Dictionaries(iOS)輕松創建它。 請享用 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.