【问题标题】:412 no matching index found while executing a query in cloud datastore412 在云数据存储中执行查询时未找到匹配索引
【发布时间】:2015-09-16 11:29:34
【问题描述】:

我正在使用 gcloud-python 库从云数据存储中查询数据。考虑一下我的 sn-p 是这样的

from google.appengine.ext import ndb
from datetime import datetime
class Order(ndb.Model):
     order_name = ndb.StringProperty(required=True)
     date_created = ndb.DateTimeProperty(default= datetime.now())

#code for querying the cloud datastore
from gcloud.datastore.query import Query

date_start = datetime.combine(date(year=2015, month=08, day=01), time())
date_end = datetime.combine(date(year=2015, month=08, day=03), time())

query = Query(kind='Order')

query.add_filter('order_name', '=', 'grand-line-order')
query.add_filter('date_created', '<', date_end)
query.add_filter('date_created', '>', date_start)

iterator = query.fetch(limit=10)
records, more, cursor = iterator.next_page()
print records

对于上面的 sn-p 我得到了

    File "/Users/sathyanarrayanan/Desktop/app/services/cdr_helper.py", line 528, in fetch_cdr
    records, more, cursor = iterator.next_page()
  File "/Users/sathyanarrayanan/Desktop/app/gcloud/datastore/query.py", line 388, in next_page
    transaction_id=transaction and transaction.id,
  File "/Users/sathyanarrayanan/Desktop/app/gcloud/datastore/connection.py", line 257, in run_query
    datastore_pb.RunQueryResponse)
  File "/Users/sathyanarrayanan/Desktop/app/gcloud/datastore/connection.py", line 108, in _rpc
    data=request_pb.SerializeToString())
  File "/Users/sathyanarrayanan/Desktop/app/gcloud/datastore/connection.py", line 85, in _request
    raise make_exception(headers, content, use_json=False)
PreconditionFailed: 412 no matching index found.

我的Index.yaml文件是这样的。

indexes:
- kind: Order
  ancestor: yes
  properties:
  - name: date_created

- kind: Order
  ancestor: yes
  properties:
  - name: date_created
    direction: desc

- kind: Order
  ancestor: yes
  properties:
  - name: order_name
    direction: asc
  - name: date_created
    direction: desc

- kind: Order
  ancestor: yes
  properties:
  - name: order_name
    direction: asc
  - name: date_created
    direction: asc

我做错了吗?请帮帮我。

【问题讨论】:

    标签: google-cloud-datastore gcloud-python google-cloud-python


    【解决方案1】:

    您的所有索引都使用了祖先:是的,因此应该在您的查询中添加祖先键。如果没有祖先,您的索引配置需要另一个带有 'ancestor:no' 的索引

    - kind: Order
      ancestor: no
      properties:
        - name: order_name
          direction: asc
        - name: date_created
          direction: desc
    

    注意:每个查询的特定索引

    【讨论】:

      【解决方案2】:

      index configuration docs 表示索引配置应位于名为datastore-indexes.xml 的 XML 文件中。

      【讨论】:

      • 其实我用的python应该是index.yaml。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2018-11-23
      • 2018-12-08
      • 2018-11-28
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多