Solución:
Estoy de acuerdo con la respuesta de @ Kuba, pero aún así, debe agregar un pequeño cambio para que funcione perfectamente para la búsqueda por prefijo. aquí lo que funcionó para mí
Para buscar registros que comiencen con el nombre queryText
collectionRef.where('name', '>=', queryText).where('name', '<=', queryText+ 'uf8ff')
.
El personaje uf8ff
utilizado en la consulta es un punto de código muy alto en el rango Unicode (es un área de uso privada [PUA] código). Debido a que se encuentra después de la mayoría de los caracteres regulares en Unicode, la consulta coincide con todos los valores que comienzan con queryText
.
No existe tal operador, los permitidos son ==
, <
, <=
, >
, >=
.
Puede filtrar solo por prefijos, por ejemplo, para todo lo que comience entre bar
y foo
puedes usar
collectionRef.where('name', '>=', 'bar').where('name', '<=', 'foo')
Puede usar un servicio externo como Algolia o ElasticSearch para eso.
Si bien la respuesta de Kuba es cierta en lo que respecta a las restricciones, puede emular parcialmente esto con una estructura similar a un conjunto:
{
'terms': {
'reebok': true,
'mens': true,
'tennis': true,
'racket': true
}
}
Ahora puedes consultar con
collectionRef.where('terms.tennis', '==', true)
Esto funciona porque Firestore creará automáticamente un índice para cada campo. Desafortunadamente, esto no funciona directamente para consultas compuestas porque Firestore no crea índices compuestos automáticamente.
Aún puede solucionar esto almacenando combinaciones de palabras, pero esto se pone feo rápidamente.
Probablemente aún esté mejor con una búsqueda de texto completo externa.