2013-02-02 114 views
1

我有幾個實體,我正在搜索包括日期,並且Search API在所有這些實體中都很好,除了一件事情 - 排序。App Engine搜索API - 排序結果

下面是我的實體的一個數據模型(簡化當然):

class DepositReceipt(ndb.Expando): 
    #Sets creation date 
    creation_date = ndb.DateTimeProperty(auto_now_add=True) 

和代碼來創建search.Document其中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 Search 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"更改爲anyt其他的工作完全正常。這也發生在我使用日期的其他實體類型上,所以我不知道發生了什麼。建議嗎?

回答

3

我認爲default_value需要是有效的日期,而不是'',因爲您擁有它。

+0

修復它。謝謝! – rhefner1