簡體   English   中英

Swift,Firebase,Flashlight,如何存儲數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM