返回“未找到匹配索引”的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()
然后,我找到了那个叫汤姆的人李>
- 如果我只想检索年龄等于32岁的人,我会添加到上面的过滤器
- 但是,如果我不使用
Operator.EQUAL
而使用像Operator.LESS_THAN
或Operator.GREATER_THAN
这样的不等式过滤器,我会得到错误“找不到匹配的索引”李>
我认为这是索引的问题,但我真的不明白如何设置索引。我使用Android Studio,但我根本不使用应用程序引擎。我只想用一个简单的WHERE age > 32
检索数据,就像我使用MySQL一样
顺便说一句,我尝试使用GQL,得到了完全相同的问题,使用EQUAL
,但不使用GREATER_THAN
(在https://developers.google.com/apis-explorer中也是如此)
那么,有人知道我如何解决这个问题吗?谢谢
共 (2) 个答案
现在,在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));
# 1 楼答案
云数据存储的索引配置使用gcd.sh工具处理
如果您能够对
gcd.sh
提供的本地数据存储运行查询,那么这是最简单的。该工具可以准确地确定您需要哪些索引,然后您可以使用updateindexes
命令在生产应用程序上配置它们如果没有,也可以手动配置索引:
gcd.sh create <project> -d <project>
<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提供了有关索引文件格式的其他详细信息
# 2 楼答案
所以,正如Ed Davidson刚才所说的,一切都是通过gcd完成的
我花了很多时间才明白该做什么,所以我把我的经验放在下面,也许这会对某人有所帮助。我正在使用Ubuntu,我不知道其他操作系统
cd Downloads/gcd-v1beta2-rev1-2.1.1
./gcd.sh create -d myDataset myProjectName
,其中myDataset是Google Developers Console中的项目ID(它由两个随机名词和一个数字组成)因为我想检索那些拥有公司且年龄超过20岁的人,所以我不得不添加Ed Davidson所说的索引
在您的控制台中,
./gcd.sh updateindexes myProjectName