如何在查询GAE数据存储区时修复索引错误?

del*_*ine 8 google-app-engine app-engine-ndb google-cloud-datastore

当我尝试在按日期排序的数据存储上运行查询时,我收到以下错误:

NeedIndexError: no matching index found.
The suggested index for this query is:

- kind: Message
  properties:
  - name: author
  - name: ref
  - name: date
Run Code Online (Sandbox Code Playgroud)

如果我不尝试按日期排序,则查询运行时没有错误.数据存储索引下的appengine控制台说:

author ? , ref ? , date ?   
Serving
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何运行按日期排序的查询?谢谢!

这是我的实体定义:

from google.appengine.ext import ndb

class Message(ndb.Model):
    subject = ndb.StringProperty()
    body = ndb.TextProperty()
    date = ndb.DateTimeProperty(auto_now_add=True)
    ref = ndb.StringProperty( required=True )
    author = ndb.KeyProperty(required=True)
Run Code Online (Sandbox Code Playgroud)

这是失败的查询:

def readMessages( ref, user = None ):
    query = Message.query()
    query = query.filter(Message.ref == ref )
    if user:
        query = query.filter(Message.author == user.key )
    query = query.order(Message.date)

# convert to a list so we can index like an array
return [ message for message in query ]
Run Code Online (Sandbox Code Playgroud)

我的index.yaml包含:

indexes:

- kind: Message
  properties:
  - name: author
  - name: ref
  - name: date
    direction: desc
Run Code Online (Sandbox Code Playgroud)

Law*_*Mok 4

您还需要指定“方向”,因为“排序”是在编写索引时完成的,以加快 Google 风格的速度。

所以,你的index.yaml应该是这样的:

indexes:

- kind: Message
  properties:
  - name: author
  - name: ref
  - name: date
    direction: desc
Run Code Online (Sandbox Code Playgroud)

以下是 Google 官方关于订单的描述:

排序方向,asc 表示升序,desc 表示降序。这仅对于查询排序顺序中使用的属性是必需的,并且必须与查询使用的方向匹配。默认为升序。

我希望这有帮助。