查询大于/小于与其他字段组合请求已存在的索引

时间:2014-07-28 23:13:32

标签: google-app-engine

我的实体Word得到了这样的索引:

  

改变▲+类型▲

我已经向数据存储添加了一个实体,并且可以在控制台中成功查询它,如下所示:

  

KIND Word

     

已更改为大于0的数字

但是如果我像这样在过滤器中添加第二个字段:

  

KIND Word

     

已更改为大于0的数字

     

type是一个名词

的字符串

它将失败并显示错误“您需要索引来执行此查询。”

在我看来,它所要求的确切指数已经存在。任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

获取所需索引的最佳方法是在您的devserver上运行查询,确保您点击可以在生产中执行的每个查询。

当您处于开发阶段时,开发服务器将在您的xml / yaml(java / python)中创建应用程序所需的所有索引。如果您没有在您的devserver上点击该特定查询,则该索引不在您的xml / yaml中,您需要手动添加它。

当您使用数据存储区时,这是一种范式转换,但您必须了解,出于可伸缩性原因,数据存储区无法进行任何计算。它只会返回您对表的扫描。当您在表中保存一个实体时,在场景后面,数据存储区实际上会多次保存它,每个索引一个,已经为该索引排序。因此,即使您具有参数1的索引和参数2的单独索引,也不一定会为参数1和参数2创建复合索引。 2.因此,如果您不在xml / yaml中创建该复合索引,则“强制”数据存储区在表之间进行连接,但遗憾的是,这不是。

我把它作为最佳实践来点击每个查询,我可以在开发服务器中使用我的代码,然后查看我创建的索引。您只需要小心不要创建大量的索引,因为它们会影响您的配额并最终导致您付出代价(如果您的应用当然已启用结算)。

答案 1 :(得分:0)

为了查询两个字段,您需要一个组合索引,而不是两个字段的单独索引。

有关数据存储索引的详细信息,请查看此内容:

https://developers.google.com/appengine/articles/indexselection