Javascript 我们如何在Firestore db中搜索5000个用户?

Javascript 我们如何在Firestore db中搜索5000个用户?,javascript,firebase,vue.js,google-cloud-firestore,vuetify.js,Javascript,Firebase,Vue.js,Google Cloud Firestore,Vuetify.js,我们有一个人员配置应用程序,使用vuejs和一个拥有5000多用户的firestore数据库构建。我们的挑战是,我们需要管理员在数据库中搜索用户的布局 以前,我们在users.vue布局上加载所有用户,然后在Vuetify数据表中搜索/查看它们。现在的问题是我们的用户太多了。这种布局加载速度太慢,甚至会导致应用程序在移动浏览器上崩溃 我们正在尝试的解决方案是在数据库中搜索用户,并只将这些结果加载到我们的数据表中。下面的代码(使用vuex)可以工作,只要“名称”是准确的 getUsersState

我们有一个人员配置应用程序,使用vuejs和一个拥有5000多用户的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”只适用于数组,而不适用于我们的“user”对象

在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数据库中搜索用户,只需输入他们姓名的前几个字母?

集成全文搜索引擎,并与firestore保持同步。实现起来非常重要。官方文档推荐Algolia:

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

1) 首先,请注意Firestore的索引如下

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

如果您有一个用户名前缀,比如a,那么在进行极端的全文搜索之前,没有什么可说的,您不能对user>='a'和user='ab'&运行查询,请在此处搜索[firebase]\uf8ff,因为这些解决方案可能会为您在firebase中执行部分字符串搜索提供一些指导。请看我的答案(swift),了解更多信息。它适用于Firebase实时数据库,但概念类似。