【问题标题】:How can we search through 5,000 users in Firestore db?我们如何在 Firestore db 中搜索 5,000 个用户?
【发布时间】:2019-07-15 21:09:53
【问题描述】:

我们有一个人员配置应用程序,使用 vuejs 和一个拥有 5,000 多个用户的 firestore 数据库构建。我们面临的挑战是我们需要一个布局供管理员在数据库中搜索用户。

以前,我们在 Users.vue 布局中加载所有用户,然后在 Vuetify 数据表中搜索/查看他们。现在的问题是我们的用户太多了。该布局加载速度太慢,甚至会导致应用在移动浏览器上崩溃。

我们正在尝试的解决方案是在数据库中搜索用户,然后仅将这些结果加载到我们的数据表中。下面的代码(使用 vuex)可以工作,只要“名称”是 EXACT。

getUsersState({commit}, payload){
  fb.usersCollection.where("name", "==", payload.search).limit(10).onSnapshot(querySnapshot => {
  let usersArray = []
  console.log(payload.search)
  querySnapshot.forEach(doc => {
    let user = doc.data()
    user.id = doc.id
    usersArray.push(user)
  })
  commit('setUsers', usersArray)
  })
},

问题在于,即使我们只输入姓名的前几个字母,甚至是电子邮件地址,我们也需要它来工作。 Firestore 仅提供 ==、>=、 和

在 Users.vue 上:

created () {
  console.log('getting users')
  this.$store.dispatch("getUsersState", {search: this.search})
},
computed: {
  ...mapState(['currentUser', 'users', 'userProfile']),
  isAdmin: function() {
    return this.userProfile.accessLevel >= 5
  },
  isUsers: function() {
    return this.users
  }
},
watch: {
  search: 'updateSearch'
},
methods: {
  clearSearch () {
    return this.isSearch = ''
  },
  updateSearch() {
    this.$store.dispatch("getUsersState", {search: this.search})
  },
},

是否有人对我们如何通过仅输入用户姓名的前几个字母来搜索 Firestore 数据库中的用户有任何想法?

【问题讨论】:

    标签: javascript firebase vue.js google-cloud-firestore vuetify.js


    【解决方案1】:

    正确的答案是全文搜索,但对于这个用例来说是一把大锤。以下是一些可以让您坚持一段时间的其他选项:

    1) 首先,请注意 Firestore 有一个索引,看起来像

    Collection\User\a   -> somedoc
    Collection\User\aaa -> somedoc
    Collection\User\aba -> somedoc
    Collection\User\abc -> somedoc
    Collection\User\bbc -> somedoc
    

    如果你有一个用户名 prefix 像 a 没有什么可以说你不能运行一个查询 user >='a' 和 user

    同样 >= 'ab' &&

    因此,您从获取所有 5000 个用户到仅获取具有前缀的用户——这要小得多。

    2) 将您想要自动完成的内容填充到几个文档中并加载它们。

    假设您有 5000 个用户,并且您将他们的姓名存储到 10 个文档中,每个文档有 500 个用户名——您可以在用户添加或删除这些文档时保持这些文档的最新状态。要获得整个自动完成列表,您需要将这 10 个文档获取到浏览器中,并将 5000 个用户提供给某种自动完成小部件。你可以对电子邮件做同样的事情。

    浏览器现在可以执行精美的即时自动完成功能。这比获取 5000 个用户的整个集合更快/更便宜——你只需要你需要的数据。

    【讨论】:

      【解决方案2】:

      集成全文搜索引擎,并使其与 Firestore 保持同步。实施起来很不容易。官方文档推荐 Algolia:https://firebase.google.com/docs/firestore/solutions/search

      【讨论】:

      • 在进行极端的全文搜索之前,请在 SO 上搜索 [firebase]\uf8ff,因为这些解决方案可能会为您在 Firebase 中执行部分字符串搜索提供一些指导。另请查看我的答案(swift)以获取更多信息query。它适用于 Firebase 实时数据库,但概念相似。
      猜你喜欢
      • 2015-03-17
      • 2019-05-02
      • 2019-09-07
      • 2020-08-12
      • 2020-06-20
      • 2021-10-05
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多