Я использую базу данных Firestore и FirebaseUI для загрузки результатов в представление переработчика в android kotlin. Я испытываю что-то странное.
Я понимаю ошибку "Запрос требует индекс", когда выполняется слишком много разных запросов в разных полях. Тем не менее, я понимаю, что вы можете сделать много запросов, где EqualTo вместе с одним запросом orderBy. Теперь, когда я делаю этот запрос сам (не используя FirestoreRecyclerOptions). У меня нет проблем, и это прекрасно работает.
Однако, когда я использую запрос с FirestoreRecyclerOptions, например, вот так:
var querySearch = FirebaseFirestore.getInstance()
.collection(DB_DEALS_COLLECTION).document(departureCountry.toString()).collection(DB_DEALS_SUB_COLLECTION)
.whereEqualTo(FILTER_FIELD_APR, true)
.whereEqualTo(FILTER_FIELD_AUG, true)
.whereEqualTo(FILTER_FIELD_DEC, true)
.orderBy(FILTER_FIELD_TIMESTAMP, Query.Direction.DESCENDING).limit(15)
val options = FirestoreRecyclerOptions.Builder<Deal>().setQuery(querySearch, Deal::class.java).build()
Я получаю эту ошибку:
[ Firestore]: Listen for Query(target=Query(deals_collection/USA/deals where monthApr == true and monthAug == true and monthDec == true order by -timestamp, -__name__);limitType=LIMIT_TO_FIRST) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index.
Теперь, две странные вещи: 1. На самом деле правильные результаты показывают в моем обзоре переработчика, я думаю, насколько я проверял. Но я волнуюсь, почему я получаю это сообщение, и я не хочу иметь неправильные результаты в будущем. 2. Когда я нажимаю на ссылку в консоли, чтобы добавить индекс, я получаю следующее сообщение в консоли Firestore: «Я должен создать составной индекс с этими полями:
monthApr Ascending
monthAug Ascending
monthDec Ascending
timestamp Descending
Теперь я никогда хотел, чтобы эти поля были восходящими, только отметка времени?
Примечание: это происходит только тогда, когда я включаю:
.orderBy(FILTER_FIELD_TIMESTAMP,
Также в консоли, которую я вижу, limitType=LIMIT_TO_FIRST
. Также я вижу, -__name__
. Что это, я их никогда не устанавливал!
Надеюсь, моя проблема ясна, я немного запутался со всем этим.
Спасибо!