我正尝试在包含特定key
的集合中搜索文档。
这是我构建Firestore数据库的方式:
-- FirestoreRoot
|-- Products (Collection)
|-- Departments (Document)
|-- Food (Colletion)
|-- {Id} (Document)
-- description : "this is my very first description"
-- keywords :
-- 0 : this
-- 1 : is
-- 2 : my
-- 3 : very
-- 4 : first
-- 5 : description
在下面的示例中,我可以使用substring
来搜索description
中的第一个单词。迄今为止,该方法不适用于查询以下单词。在下面的示例中,键入字母“ thi”足以返回文档。
CollectionReference colecRef = FirebaseFirestore.getInstance()
.collection("Products")
.document("Departments")
.collection("Food");
Query query = colecRef;
query.whereGreaterThanOrEqualTo("description", searchField.getText().toString().toLowerCase())
.whereLessThan("description", searchField.getText().toString().toLowerCase()+'\uf8ff')
.get().addOnSuccessListener(SearchActivity.this, new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Log.i(TAG, "onSuccess: "+documentSnapshot);
}
}
});
对于我来说,我需要使用1个或多个键进行搜索,例如:第一或第一描述。通过使用整个单词或仅使用一个子字符串,例如: first 或 descr
我尝试使用whereArrayContains()
,但是不能通过键入multiple keys
或substring
使用它。
query.whereArrayContains("keywords",searchField.getText().toString().toLowerCase())
.get().addOnSuccessListener(SearchActivity.this, new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Log.i(TAG, "onSuccess: "+documentSnapshot);
}
}
})
感谢您的帮助。
答案 0 :(得分:0)
Firestore当前仅提供两种查询数组内容的方法:
如您所见,在数组中搜索子字符串根本行不通。您可能要考虑与Firestore一起使用另一个数据库,以便满足这些特定查询,因为Firestore不太适合它们。