Atualmente, uso esta abordagem para pesquisar usuários no Firebase:
Encontrarei um usuário se pesquisar por parte da palavra no nome. Por exemplo:
pesquisar "us" retornará "User6 Name12"
pesquisar "nam" retornará "User6 Name12"
pesquisar "ser6" não retornará "User6 Name12" porque o array não contém esta sequência de caracteres.
Posso obter o mesmo resultado com a consulta se eu separar userName
por palavras completas em vez da abordagem acima e armazená-las como array/mapa?
Para um único campo, "userName": "User Name"
posso aplicar uma consulta como esta, collection("users").sortBy("userName").startAt(searchText).endAt(searchText + '\uf8ff')
que retornará o nome dos primeiros caracteres até o final da string, mas não consigo pesquisar a partir da segunda palavra (se pesquisar "Nome" em "Nome de Usuário"). Passei dias procurando a mesma abordagem para matrizes/mapas, mas não encontrei nada. Será que isso é possível?
O documento atual na primeira captura de tela contém apenas substrings do início de cada palavra, então é só nisso que você pode pesquisar.
Você precisará preencher a matriz com uma lista exaustiva de itens que deseja corresponder exatamente - então a matriz precisa incluir o
ser6
no seu exemplo (e todas as outras permutações).Isso tornará o array muito maior, mas é a única maneira de fazer esse tipo de pesquisa funcionar no Firestore. Como ele inerentemente não possui o tipo de operação de pesquisa que você procura, você terá que imitá-lo duplicando muitos dados.
Honestamente, se você quiser algo parecido com uma pesquisa de texto completo, use uma ferramenta dedicada de pesquisa de texto completo, como as mostradas na documentação do Firebase sobre pesquisa de texto completo no Firestore .