5

** 更新 **

感谢 Alfred Fuller 指出我需要为此查询创建手动索引。

不幸的是,使用来自 .NET 应用程序的 JSON API,似乎没有官方支持的方式。事实上,官方似乎根本没有办法从 App Engine 之外的应用程序中执行此操作,这很奇怪,因为 Cloud Datastore API 旨在允许访问 App Engine 之外的数据存储区。

我能找到的最接近的黑客是使用 RPC 将索引定义发布http://appengine.google.com/api/datastore/index/add。有人可以给我关于如何准确执行此操作的原始规范(即 URL 参数,正文应该是什么样子等),也许使用 Fiddler 来检查 appcfg.cmd 进行的调用?

**原始问题**

根据文档,“查询可以结合不同属性的相等 (EQUAL) 过滤器,以及单个属性上的一个或多个不等式过滤器”。

但是,此查询失败:

{
 "query": {
  "kinds": [
   {
    "name": "CodeProse.Pogo.Tests.TestPerson"
   }
  ],
  "filter": {
   "compositeFilter": {
    "operator": "and",
    "filters": [
     {
      "propertyFilter": {
       "operator": "equal",
       "property": {
        "name": "DepartmentCode"
       },
       "value": {
        "integerValue": "123"
       }
      }
     },
     {
      "propertyFilter": {
       "operator": "greaterThan",
       "property": {
        "name": "HourlyRate"
       },
       "value": {
        "doubleValue": 50
       }
      }
     },
     {
      "propertyFilter": {
       "operator": "lessThan",
       "property": {
        "name": "HourlyRate"
       },
       "value": {
        "doubleValue": 100
       }
      }
     }
    ]
   }
  }
 }
}

回复如下:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "FAILED_PRECONDITION",
    "message": "no matching index found.",
    "locationType": "header",
    "location": "If-Match"
   }
  ],
  "code": 412,
  "message": "no matching index found."
 }
}
4

4 回答 4

6

JSON API 尚不支持本地索引生成,但我们记录了一个过程,您可以按照该过程在https://developers.google.com/datastore/docs/tools/indexconfig#Datastore_Manual_index_configuration生成索引的 xml 定义

请试一试,如果它不起作用,请告诉我们。

这是一个临时解决方案,我们希望尽快用自动本地索引生成来代替。

于 2013-07-03T00:04:05.817 回答
2

错误“找不到匹配的索引”。表示需要添加索引才能使查询正常工作。请参阅自动索引生成文档

在这种情况下,您需要具有属性 DepartmentCode 和 HourlyRate 的索引(按此顺序)。

于 2013-07-02T17:57:56.003 回答
1

因为gcloud-node我用这 3 个链接修复了它:

最重要的链接:

正如上一个链接中所解释的,索引是通过将查询的结果集存储在索引中来允许复杂查询运行得更快的原因。当你得到no matching index found它意味着你试图运行一个涉及orderor的复杂查询filter。因此,为了使您的查询正常工作,您需要通过手动创建配置文件来在 google 数据存储索引上创建索引,以定义代表您尝试运行的查询的索引。以下是您的修复方法:

  1. 通过遵循 python conf 文件的指令,在您的 app 目录index.yaml中的文件夹中创建一个文件: https ://cloud.google.com/appengine/docs/python/config/indexconfig#Python_About_index_yaml或从测试中获取灵感在https://github.com/GoogleCloudPlatform/gcloud-node/blob/master/system-test/data/index.yamlindexesgcloud-node
  2. 使用此命令从配置文件创建索引: gcloud preview datastore create-indexes indexes/index.yaml 请参阅https://cloud.google.com/sdk/gcloud/reference/preview/datastore/create-indexes
  3. 等待索引在 Cloud Datastore/Indexes 中的开发者控制台上服务,一旦索引建立,界面应该显示“服务”
  4. 一旦它为您的查询提供服务应该可以工作

例如对于这个查询:

 var q = ds.createQuery('project')
  .filter('tags =', category)
  .order('-date');

index.yaml好像:

indexes:

- kind: project
  ancestor: no
  properties:
  - name: tags
  - name: date
    direction: desc
于 2015-08-10T20:44:44.637 回答
0

尽量不要订购结果。删除 orderby() 后,它对我有用。

于 2021-07-14T17:39:23.230 回答