example configurar con agregar ios swift search firebase firebase-database

configurar - Búsqueda a través de datos de firebase: iOS, Swift



firebase ios swift example (3)

Así que comience con un nodo de productos para todos los productos. El nombre del nodo se crea con 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

Luego dividimos las especificaciones y volvemos a referirnos a los productos en cada nodo.

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

Si quieres todo negro, 13 "Macs, observaSingleEventOfType of .Value en el

specs/black/13

nodo que cargará en las referencias de producto abcde y fghij.

Si desea obtener todas las laptops de 15 pulgadas grises, haga lo mismo en el

specs/grey/15

nodo.

Si quieres todas las laptops de 13 pulgadas, observa el

specs/13

nodo

La belleza de esto es que no necesita ninguna consulta, ya que sabe específicamente qué datos está buscando. Las consultas son muy pesadas en comparación con un evento de observación.

Otra opción es compilar las especificaciones en líneas individuales

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

A continuación, puede consultar fácilmente todos los modelos que tengan SSD_Thunderbolt.

También puede consultar todos los productos que comienzan con: 13_ y termina con: 13_

Tendrá que poner las diversas combinaciones dentro de cada especificación para poder consultar 13_SSD, pero si solo tiene 3 o 4 especificaciones, no es tan malo.

Recuerde: el espacio en disco es barato y no tenga miedo de duplicar datos en diferentes formatos para recuperar lo que desea. Además, crear un analizador para leer el producto principal, analizarlo y volcar las especificaciones en sus combinaciones es bastante simple.

Espero que ayude.

Quería saber si es posible y cómo puedes buscar a través de Firebase. Mi aplicación tiene un campo de texto donde puede completar algunas especificaciones que se ''guardan'' en una matriz.

por ejemplo:

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

Ahora quiero buscar con 2 opciones segmentadas:

  • Busque el nombre de uno de los Elektronics que tenga una especificación de 13 "o sea negro" (este dispositivo elektronic puede tener otras especificaciones, pero debe incluir al menos una de las especificaciones especificadas)

  • Busque el nombre de uno de los Elektronics que solo tenga las especificaciones que escribí, menos especificaciones están bien, pero no más especificaciones que donde la persona buscó.

Ejemplo : Buscar "negro" "13 pulgadas"; searchResults podría incluir un macbook con una especificación: "negro", pero también podría incluir un macbook Pro con 2 especificaciones: "negro" y "13 pulgadas", pero no puede incluir un macbook Air con especificaciones: "Negro", " 13 pulgadas "," Retina "

El resultado de búsqueda vendría en una vista de tabla, o almacenaría los nombres correctos de los resultados de búsqueda en la matriz, que pondría en una UITableView

Debajo de mi base de datos, espero que entiendas lo que estoy buscando.

Gracias


Cambia tu estructura JSON a

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

No creo que pueda hacer coincidir dos consultas de nodo a la vez, pero lo que puede hacer es, puede hacer coincidir una especificación .queryEqualToValue a la vez

Entonces, una solución alternativa sería: recuperar todos los parentNodes que tienen una especificación particular y luego iterar a través de ellos para que coincidan con su otra especificación

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 i.e 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) } })


También podría usar una solución SQL en lugar de Key-Value. Firebase es estrictamente una base de datos de valores clave.