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