Android Studio:使用子字符串

时间:2019-11-20 22:47:26

标签: android firebase google-cloud-firestore

我正尝试在包含特定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 keyssubstring使用它。

      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);
                        }
                    }
                })

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Firestore当前仅提供两种查询数组内容的方法:

如您所见,在数组中搜索子字符串根本行不通。您可能要考虑与Firestore一起使用另一个数据库,以便满足这些特定查询,因为Firestore不太适合它们。