首页 > 解决方案 > Android Studio:使用子字符串查询包含数组节点的文档

问题描述

我正在尝试集合搜索包含某个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

在下面的示例中,我可以使用 asubstring作为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 个或多个键进行搜索,例如:firstfirst description。并使用整个单词或仅使用子字符串,例如:firstdescr

我试过用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);
                        }
                    }
                })

我很感激任何帮助。

标签: androidfirebasegoogle-cloud-firestore

解决方案


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

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


推荐阅读