esta función funciona bien con una cadena igual, pero necesito buscar una subcadena: si escribo "h" y la cadena es "hola", necesito devolverla
async getUsers(searchUser) { return firestore().collection('Users').where(searchUser).where('firstName', '==', searchUser) .limit(20).get().then(snapshot => { snapshot.docs.forEach(doc => { const usersData = { ...doc.data(), id: doc.id }; return usersData }); }) }¡Puedo darte una respuesta! En ese caso, debe utilizar un servicio de búsqueda de terceros dedicado. Estos servicios brindan capacidades avanzadas de indexación y búsqueda mucho más allá de lo que puede ofrecer cualquier simple consulta de base de datos. Utilice "Algolia" y en ese momento su código de acuerdo con sus expectativas debe ser así.
const client = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey'); const index = client.initIndex('firstName'); index.search(searchUser, { attributesToRetrieve: ['firstname', 'lastname'/*, .. etc the fields you need*/], hitsPerPage: 20 /* the page Size */, }).then(({ hits }) => { console.log(hits); // the results you want });Solo inténtalo. ¿Útil para ti? Si tiene éxito, sería feliz. Si tiene alguna pregunta, comuníquese con "Nykolai.B0411@outlook.com". Te ayudaré. Gracias.
Cuando registra un nuevo usuario en su aplicación, puede almacenar su nombre de usuario/nombre en firestore como una matriz que incluye las posibles formas en que buscaría un usuario (mire la imagen adjunta). Puede hacerlo dividiendo la cadena de nombre.
luego puede consultar la colección de usuarios buscando en esa matriz usando arrayContains como este:
await usersCollection .where('searchOptions', arrayContains: searchText) .get() .then((value) => value.docs.map((doc) => User.fromSnapShot(doc)).toList());Si necesita más capacidades que eso, es posible que deba utilizar un servicio de terceros. pero esta solución debería ser suficiente para su caso.