我有几个要搜索的实体,包括日期,搜索 API 在所有实体上都很好用,除了一件事 - 排序。
这是我的一个实体的数据模型(当然是简化的):
class DepositReceipt(ndb.Expando):
#Sets creation date
creation_date = ndb.DateTimeProperty(auto_now_add=True)
创建search.Document
where的代码de
是实体的一个实例:
document = search.Document(doc_id=de.key.urlsafe(),
fields=[search.TextField(name='deposit_key', value=de.key.urlsafe()),
search.DateField(name='created', value=de.creation_date),
search.TextField(name='settings', value=de.settings.urlsafe()),
])
这将返回一个有效的文档。
最后是问题线。我从官方 GAE 搜索 API 教程中获取了这个片段,只是将排序方向DESCENDING
更改为并将搜索表达式更改为created
(上面的日期属性Document
)。
expr_list = [search.SortExpression(
expression="created", default_value='',
direction=search.SortExpression.DESCENDING)]
我认为这并不重要,但搜索代码的其余部分如下所示:
sort_opts = search.SortOptions(expressions=expr_list)
query_options = search.QueryOptions(
cursor=query_cursor,
limit=_NUM_RESULTS,
sort_options=sort_opts)
query_obj = search.Query(query_string=query, options=query_options)
search_results = search.Index(name=index_name).search(query=query_obj)
在生产中,我收到以下错误消息:
InvalidRequest: Failed to parse search request "settings:ag5zfmdoaWRvbmF0aW9uc3IQCxIIU2V0dGluZ3MYmewDDA"; failed to parse date
将其更改expression="created"
为其他任何东西都可以正常工作。这也发生在我使用日期的其他实体类型中,所以我不知道发生了什么。建议?