有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

返回“未找到匹配索引”的java Google云数据存储

在Android Studio中,我试图使用Android应用程序中的Google Clood数据存储

通过谷歌的例子https://cloud.google.com/datastore/docs/concepts/indexes#Datastore_Indexes_and_properties我可以将汤姆(32岁)和露西(30岁)添加为Acme公司的人和孩子。我可以在Google开发者控制台的数据存储中看到这两个条目

  • 如果我按如下所示设置查询筛选器,我可以从公司Acme检索子项

    Key acmeKey = makeKey("Company", "Acme").build();
    makeFilter("__key__",
        PropertyFilter.Operator.HAS_ANCESTOR,
        makeValue(acmeKey)).build()));
    
    • 如果我只想检索年龄等于32岁的人,我会添加到上面的过滤器makeFilter("age", PropertyFilter.Operator.EQUAL, makeValue(32)).build() 然后,我找到了那个叫汤姆的人

  • 但是,如果我不使用Operator.EQUAL而使用像Operator.LESS_THANOperator.GREATER_THAN这样的不等式过滤器,我会得到错误“找不到匹配的索引”

我认为这是索引的问题,但我真的不明白如何设置索引。我使用Android Studio,但我根本不使用应用程序引擎。我只想用一个简单的WHERE age > 32检索数据,就像我使用MySQL一样

顺便说一句,我尝试使用GQL,得到了完全相同的问题,使用EQUAL,但不使用GREATER_THAN(在https://developers.google.com/apis-explorer中也是如此)

那么,有人知道我如何解决这个问题吗?谢谢


共 (2) 个答案

  1. # 1 楼答案

    云数据存储的索引配置使用gcd.sh工具处理

    如果您能够对gcd.sh提供的本地数据存储运行查询,那么这是最简单的。该工具可以准确地确定您需要哪些索引,然后您可以使用updateindexes命令在生产应用程序上配置它们

    如果没有,也可以手动配置索引:

    1. gcd.sh create <project> -d <project>
    2. <project>/WEB-INF/datastore-indexes.xml处创建一个包含以下内容的文件:

    <?xml version="1.0" encoding="utf-8"?> <datastore-indexes autoGenerate="true"> <datastore-index kind="Company" ancestor="true"> <property name="age" direction="asc" /> </datastore-index> </datastore-indexes>

    1. gcd.sh updateindexes <project>

    文件的确切内容将取决于要运行的查询This page提供了有关索引文件格式的其他详细信息

  2. # 2 楼答案

    所以,正如Ed Davidson刚才所说的,一切都是通过gcd完成的

    我花了很多时间才明白该做什么,所以我把我的经验放在下面,也许这会对某人有所帮助。我正在使用Ubuntu,我不知道其他操作系统

    1. 下载文件夹中下载gcd-v1beta2-rev1-2.1.1.zip
    2. 解压缩下载的文件
    3. 在控制台中,转到unziped文件夹cd Downloads/gcd-v1beta2-rev1-2.1.1
    4. 然后,./gcd.sh create -d myDataset myProjectName,其中myDatasetGoogle Developers Console中的项目ID(它由两个随机名词和一个数字组成)
    5. 转到unziped文件夹gcd-v1beta2-rev1-2.1.1,您将看到一个文件夹myProjectName。在这个myProjectName文件夹中,在文件夹WEB-INF中创建一个文件数据存储索引。xml
    6. 因为我想检索那些拥有公司且年龄超过20岁的,所以我不得不添加Ed Davidson所说的索引

      &13; 第13部分,;
      <?xml version="1.0" encoding="utf-8"?>
      <datastore-indexes autoGenerate="true">
       <datastore-index kind="Person" ancestor="true">
         <property name="age" direction="asc" />
       </datastore-index>
      </datastore-indexes>
      和#13;
    和#13;
  3. 在您的控制台中,./gcd.sh updateindexes myProjectName

现在,在Google开发者控制台中,您可以在云数据存储下看到这个新索引->;索引

最后,您可以检索年龄

Key acmeKey = makeKey("Company", "Acme").build();
Query.Builder query = Query.newBuilder();
query.addKindBuilder().setName("Person");
query.setFilter(makeFilter(

    makeFilter("__key__",
        HAS_ANCESTOR,
        makeValue(acmeKey)).build(),

    makeFilter("age",
        GREATER_THAN,
        makeValue(20)).build()));

 query.addOrder(makeOrder("age", ASCENDING));