gpt4 book ai didi

java - Google Cloud Datastore - 不平等返回 "no matching index found"

转载 作者:行者123 更新时间:2023-12-02 04:52:28 25 4
gpt4 key购买 nike

Android Studio 中,我尝试从 Android 应用使用 Google Clood Datastore

以 Google 为例 https://cloud.google.com/datastore/docs/concepts/indexes#Datastore_Indexes_and_properties我可以将 Tom(32 岁)和 Lucy(30 岁)添加为个人和公司 Acme 的子级。我可以看到这两个条目位于 Google Developers Console 的数据存储区中。

  • 如果我设置如下查询过滤器,我可以从 Acme 公司检索子项。

    Key acmeKey = makeKey("Company", "Acme").build();
    makeFilter("__key__",
    PropertyFilter.Operator.HAS_ANCESTOR,
    makeValue(acmeKey)).build()));
    • 如果我只想检索年龄等于 32 岁的 Person,我将添加到上面的过滤器 makeFilter("age", PropertyFilter.Operator.EQUAL, makeValue(32)).build()然后,我找到了汤姆这个人。
<小时/>
  • 但是,如果我使用 Operator.LESS_THANOperator.GREATER_THAN 等不等式过滤器代替 Operator.EQUAL,我会收到错误“未找到匹配的索引”。
<小时/>

我认为这是索引的问题,但我真的不明白如何设置索引。我使用 Android Studio,完全不使用 App Engine。我只想像使用 MySQL 一样使用简单的 WHERE Age > 32 来检索数据。

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

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

最佳答案

Cloud Datastore 的索引配置使用 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>

  • gcd.sh updateindexes <project>
  • 文件的确切内容将取决于您要运行的查询。 This page提供有关索引文件格式的更多详细信息。

    关于java - Google Cloud Datastore - 不平等返回 "no matching index found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29089338/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com