这是我的代码:
Query query = firestore.collection("users")
.document(myUserID)
.collection("unseen_profiles")
.whereEqualTo("country", myProfileCountryFilter);
if (!myProfileGenderFilter.isEmpty() && !myProfileGenderFilter.equalsIgnoreCase("everyone")) {
query = query.whereEqualTo("gender", myProfileGenderFilter);
}
if (heightFilterOn) {
query = query.whereGreaterThanOrEqualTo("height", minimumHeight);
}
if (weightFilterOn) {
query = query.whereLessThanOrEqualTo("weight", maximumWeight);
}
if (customAgeFilterOn) {
query = query.whereGreaterThanOrEqualTo("age", minimumAge)
.whereLessThanOrEqualTo("age", maximumAge);
}
if (lookingForFilterOn) {
query = query.whereArrayContainsAny("looking_for", lookingForArray);
}
if (personalityTypeFilterOn) {
query = query.whereIn("personality_type", personalityTypeList);
}
if (homeCountryFilterOn) {
query = query.whereEqualTo("home_country", homeCountryFilter);
}
// Add orderBy for timestamp
query = query.orderBy("timestamp");
// Configure the adapter options
PagingConfig config = new PagingConfig(
10, // PageSize
5, // PrefetchDistance
false // EnablePlaceholders
);
FirestorePagingOptions<DataModel> options = new FirestorePagingOptions.Builder<DataModel>()
.setLifecycleOwner(this) // Lifecycle owner
.setQuery(query, config, DataModel.class) // Query and the model class
.build();`
现在,当满足不同的条件时,每次应用程序崩溃并要求创建索引。但综合考虑以上条件,如果我必须为它们全部创建索引,那么需要创建大量索引。
我听说如果我需要创建很多索引,那么可能我没有有效地使用查询,或者我可能需要优化数据结构。但就我而言,我没有找到任何其他可行的选项来通过查询实现所需的功能。我错过了什么吗?如果我没有遗漏任何东西,那么我如何能够以时间效率管理创建如此大的索引?有什么方法可以在查询需要时自动创建索引而不会使应用程序崩溃或查询失败?
现在,当满足不同的条件时,每次应用程序崩溃并要求创建索引。
那是因为所有这些查询都需要索引。
但是考虑到上述条件的组合,如果我必须为所有这些条件创建一个索引,那么需要创建大量的索引。
是的,您必须为每个组合创建一个索引。因此,只要您保持在最大限制(200)以下,当您尚未为 Google Cloud 项目启用计费时,就不会有问题。如果您为 Google Cloud 项目启用结算功能,则最大数量为 500。如果这些 500 索引还不够,那么您可以联系支持人员请求增加到此限制。
我听说如果我需要创建很多索引,那么可能我没有有效地使用查询,或者我可能需要优化数据结构。
如果您需要创建许多索引,并不意味着您没有有效地使用查询。它只是意味着您需要使用多种组合来过滤数据,考虑到您需要过滤的字段太多,这很好。
如果我没有遗漏任何东西,那么我怎样才能以时间效率创建如此大的索引?
是的,您可以使用 Firebase CLI 部署 Firestore 索引。