Google Cloud Datastore runQuery返回412"找不到匹配的索引"

cod*_*sam 5 google-cloud-datastore

**更新**

感谢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
       }
      }
     }
    ]
   }
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

通过以下回复:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "FAILED_PRECONDITION",
    "message": "no matching index found.",
    "locationType": "header",
    "location": "If-Match"
   }
  ],
  "code": 412,
  "message": "no matching index found."
 }
}
Run Code Online (Sandbox Code Playgroud)

Max*_*gle 6

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

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

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


Alf*_*ler 2

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

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