現在Firebase、Flashlight、Swiftを使用して、リアルタイムデータベースからランダムオブジェクトを取得する検索機能を作成しようとしています。Swift、Firebase、懐中電灯、アレイの保管方法は?
私はこの問題は、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でエラーが発生します。
どうすればこの問題を解決できますか?私は複数のフィールドに基づいて検索できるようにしたい。
通常、あなたは配列を持って、それに "含む"操作をしたい場合は、実際にセットを使用する必要があります。 [私の答えはこちら](http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value)を参照してください。なぜこれらのカテゴリをトップに引き上げるべきか説明していますレベルリスト。 –
懐中電灯は単純にそのクエリーをESに渡しているので、そのフォーマットについて不平を言っているのはESです。私はESのシンタックスエキスパートではありませんが、以前はその構造のクエリーは見ていませんでした。 ESでここに書いたとおりに動作することを、どのように確認しましたか? [ここでは、複数のフィールドマッチについて見ています(https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-multi-match-query.html)。 – Kato