Поиск по данным Firebase: iOS, Swift

Я хотел знать, возможно ли это, и как вы можете искать в firebase. Мое приложение имеет текстовое поле, где вы можете заполнить некоторые спецификации, которые будут «сохранены» через массив.

например:

var arrayOfSpecs = ["13'", "Black"] 

Теперь я хочу выполнить поиск с помощью двух сегментированных опций:

  • Найдите имя одной из Elektronics, имеющей спецификацию 13 "или черный" (это электронное устройство может иметь другие спецификации, но должно включать хотя бы одну из данных спецификаций)

  • Найдите имя одной из Elektronics, у которой есть только те спецификации, которые я написал, меньше спецификаций в порядке, но не больше спецификаций, чем там, где искал человек.

Пример : поиск «черного» «13inch»; searchResults может включать в себя macbook с одной спецификацией: «черный», но он также может включать macbook Pro с двумя спецификациями: «черный» и «13inch», но он не может включать macbook Air со спецификациями: «черный», 13 дюймов "," Retina "

SearchResult будет отображаться в виде таблицы или будет хранить правильные имена searchResults в массиве, которые я бы добавил в UITableView

Ниже моей базы данных, я надеюсь, вы поймете, что я ищу.

спасибо

введите описание изображения здесь

3 Solutions collect form web for “Поиск по данным Firebase: iOS, Swift”

Измените структуру JSON на

  Electroniks:{ Macbook:{.., Specification:{ 13inch : true, black : true }, ... }, iPhone:{.., Specification:{ 13inch : true, black : true, camera : true }, ... }, iPad:{.., Specification:{ xinch : true, red : true, camera : true }, ... } } 

Я не думаю, что вы можете .queryEqualToValue два узла запросов сразу, но то, что вы можете, вы можете сопоставить одну спецификацию .queryEqualToValue за раз

Таким обходным путем было бы: – получить все родительскиеNodes, которые имеют одну конкретную спецификацию, а затем перебрать их в соответствии с другой спецификацией

  let parentRef = FIRDatabase.database().reference().child("Elektronics") parentRef.queryOrderedByChild("Specification/black").queryEqualToValue(true).observeSingleEventOfType(.Value, withBlock: {(snap) in if let dict = snap.value as? [String:AnyObject]{ for each in dict{ print(each.0) //Would retrieve you every product name with colour black in specification ie Macbook and iPhone print((each.1["Specification"] as! NSDictionary).count)//Number of specification parentRef.child("each.0").child("Specification").child("13inch").observeSingleEventOfType(.Value, withBlock: {(snapshot) in if snapshot.exists(){ print(each.0) //You found your product's with exactly 13inch and black Specification.This is their name } }) } }else{ print(snap.ref) } }) 

Поэтому начните с узла продуктов для всех продуктов. Имя узла создается с помощью childByAutoId.

 products -abcde name: MacBook color: black display: retina port: Thunderbolt size: 13 -fghij name: MacBook Air color: black display: standard port: USB size: 13 -xxxxx name... etc etc 

Затем мы делим спецификации и возвращаемся к продуктам в каждом узле.

 specs black 13 abcde: true fghij: true 15 xxxx: true grey 13 yyyy: true zzzz: true 15 qqqq: true 13 abcde: true fghij: true yyyy: true zzzz: true 

Если вы хотите, чтобы все черные, 13 "Mac, наблюдалиSingleEventOfType of .Value на

 specs/black/13 

узел, который будет загружаться в abcde и fghij ссылки на продукт.

Если вы хотите получить все серые 15-дюймовые ноутбуки, сделайте то же самое на

 specs/grey/15 

узел.

Если вы хотите, чтобы все 13-дюймовые ноутбуки соблюдали

 specs/13 

узел

Красота этого не требует никаких запросов, поскольку вы точно знаете, какие данные вы используете. Запросы очень тяжелые по сравнению с событием наблюдения.

Другим вариантом является компиляция спецификаций в отдельные строки

 specs -abcde black_13_retina_SSD_Thunderbolt 13_retina_SSD_Thunderbolt retina_SSD_Thunderbolt SSD_Thunderbolt Thunderbolt . . -fgijk black_13_standard_SSD_USB 13_standard_SSD_USB etc 

Затем вы можете легко запросить все модели с SSD_Thunderbolt.

Вы также можете запросить все продукты, которые запускаются с: 13_ и заканчиваетсяС: 13_

Вам нужно будет поместить различные комбинации в каждую спецификацию, чтобы вы могли запросить 13_SSD, но если у вас есть только 3 или 4 спецификации, это не так уж плохо.

Помните: дисковое пространство дешево и не бойтесь дублировать данные в разных форматах, чтобы вернуть то, что вы хотите. Кроме того, создание парсера для чтения основного продукта, его анализ и сброс спецификаций в их комбинациях довольно просты.

Надеюсь, это поможет.

Вы также можете использовать SQL-решение вместо Key-Value. Firebase – это база данных Key-Value.

  • Ошибка сброса пароля Firebase для пользователей с аутентификацией в социальных сетях
  • Проблема с Firebase 4.0.4 и iOS 11 - Beta 4
  • Выйти из системы после удаления приложения - Firebase
  • Ionic Framework и Firebase 3.x: этот домен не разрешен для операций OAuth для проекта Firebase
  • Уведомления о облачных функциях Google iOS
  • Firebase и Google Signin, дающие дубликаты символов
  • Firebase: Swift - значение запроса в дочернем узле без знания родительского ключа
  • компиляция facebook sdk с результатом -ObjC с рамой не найден Болты
  • (Firebase) печатает неправильное количество пользователей в базе данных при подсчете пользователей в массиве
  • Xcode 8.0 beta дает ошибку после импорта Firebase
  • FirebaseViewController черный
  • Interesting Posts

    iOS «Добавить на главный экран» – загрузка файла

    Как удалить изображение из каталога активов в Today Extension?

    Представление приложения: неверный двоичный код – недопустимая подпись

    iOS 7 – сообщение, отправленное на освобожденный экземпляр 0x15d17cc0

    Как загрузить несколько изображений в facebook с iphone sdk

    Имеет ли значение, где положить в мой UIViewController?

    Поиск структуры графического представления для iOS

    Ошибки при добавлении рекламного объявления AdMob Interstitial Swift

    Как удалить / декодировать процентное кодирование URL?

    Прикрепите картинку к твиттеру

    Как добавить libclang в xcode?

    Добавить изображение подписи в pdf без отображения данных PDF для пользователя в iOS

    Преобразование iPhone xib в iPad xib?

    Почему я не могу использовать «описание» в качестве имени атрибута для объекта Core Data?

    zipArchive распаковать папку документа на iOS

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.