查询搜索 Swift

Query Searches Swift

我有这个代码:

func filteredUsers(_ query: String) -> [User] {


    let lowercasedQuery = query.lowercased()
    return users.filter({ [=11=].fullname.lowercased().contains(lowercasedQuery) || [=11=].username.contains(lowercasedQuery) })
}

我正在从我的数据库中获取与搜索文本(由用户输入)相匹配的用户。

问题是,由于我的初始用户群已经增长,它调用了所有注册的用户,这变成了一个很长的列表。

当我获取我的用户时

     func fetchUsers() {
        guard let currentUid = AuthViewModel.shared.userSession?.uid else { return }

       
//        COLLECTION_USERS.limit(to: 10).getDocuments { snapshot, _ in
        COLLECTION_USERS.getDocuments { snapshot, _ in
            guard let documents = snapshot?.documents else { return }
            self.users = documents.compactMap({ try? [=12=].data(as: User.self) }).filter({ [=12=].id != currentUid })
        }
    }

并使用注释行,它只在数据库中搜索列表中的前 10 个用户,而不是所有用户。 有什么方法可以让我仍然搜索整个数据库,但只检索与查询匹配的 10 个值,而不是只搜索前 10 个用户?

如有任何帮助,我们将不胜感激, 谢谢!

您需要 use a Firestore query,而不是在您的应用程序代码中执行搜索。使用 Firestore 查询时,过滤由数据库执行,而不是在您的应用程序代码中执行。

最简单的搜索方式是:

let dbQuery = COLLECTION_USERS
    .whereField("fullname", isGreaterThanOrEqualTo: query)
    .whereField("fullname", isLessThanOrEqualTo: query+"\u{F7FF}")

此查询搜索 fullname 以给定值开头的文档。

注意几点:

  • Firestore 查询区分大小写,因此仅当大小写也完全匹配时才匹配。您可以模拟小写查询,方法是将 fullname 的小写版本存储在单独的文件中(例如 fullname_lowercase)并对其进行搜索。有关更多信息,请参阅 and
  • 此查询仅搜索 fullname 以请求的值开头的文档,而不是 在其他地方包含 该值的文档。如果需要,请考虑 using a dedicated search engine.