首页 > 解决方案 > 我们如何在 Firestore db 中搜索 5,000 个用户?

问题描述

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

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

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

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 仅提供 ==、>=、<=、> 和 < 参数。而“array-contains”仅适用于数组,而不适用于我们的“用户”对象。

在 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 数据库中的用户?

标签: javascriptfirebasevue.jsgoogle-cloud-firestorevuetify.js

解决方案


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


推荐阅读