【问题标题】:Firestore: Query names that match or similar to the searched termFirestore:查询与搜索词匹配或相似的名称
【发布时间】:2018-03-25 00:44:15
【问题描述】:

我在 Firestore 数据库中有一个用户列表及其姓名。我想要实现的是让用户能够搜索和找到其他用户。我的问题是:

Query query = db.collection("users").whereEqualTo("name", searchTerm);
FirestoreRecyclerOptions<UserObject> response = new FirestoreRecyclerOptions.Builder<UserObject>()
                .setQuery(query, UserObject.class)
                .build();

在上面的代码中,只有当我完全正确地写出他们的名字和姓氏时,我才能找到用户。但我想要的是获得具有相似姓名或姓氏的用户。而且,用户的姓氏和名字存储在一个字符串变量中。就像在 facebook 中一样,如果你搜索一些名字,它也会显示相似的名字。有没有用 Firestore 实现这一目标的好方法?

【问题讨论】:

  • 我认为最好的办法是下载整个集合,并遍历每个条目并将您的正则表达式逻辑应用于每个条目。这样,您可以在输入新名称时再次处理列表,而不会过多地点击云
  • 嗯,是的,我也在考虑。我希望当数据库变大时,处理器不会做很多工作

标签: java android firebase google-cloud-firestore


【解决方案1】:

根据official documentation:

Cloud Firestore 不支持原生索引或搜索文档中的文本字段。此外,下载整个集合以在客户端搜索字段是不切实际的。

所以我强烈建议您不要为了创建搜索而下载整个集合,这是不值得的。但为了获得更好的搜索,我建议您使用以下查询:

Query query = db.collection("users").startAt(searchText).endAt(searchText+ "\uf8ff");

如果此查询不是您要搜索的内容,我建议您使用 Algolia 搜索,Firebase 也推荐这种方式。我还建议您查看此video。

【讨论】:

  • 嗨,Alex,我检查了你的视频。好的。我将尝试实施 Algolia。 \uf8ff 是什么意思?
【解决方案2】:

迟到的答案,但对于仍在寻找答案的人来说,试试这个。

Query query = db.collection("users").whereGreaterThanOrEqualTo("name", searchTerm);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2019-06-29
    • 2011-01-11
    相关资源
    最近更新 更多