Google App Engine搜索API不包括DateField Sort中的时间

时间:2016-01-05 00:27:03

标签: google-app-engine gae-search

我有一组搜索文档,它们有一个我想要排序的DateField。此字段中的值还包含时间。当我尝试按此字段降序排序时,我会正确排序日期,但似乎时间被忽略,即:

{
  "results": [
    {
      "photo_create_date": "2016-01-04T16:51:39.096000",
    },
    {
      "photo_create_date": "2016-01-04T17:55:36.483000",
    },
    {
      "photo_create_date": "2016-01-04T22:46:37.141000",
    },
    {
      "photo_create_date": "2016-01-04T16:51:13.450000",
    },
    {
      "photo_create_date": "2016-01-04T22:44:10.289000",
    },
    {
      "photo_create_date": "2016-01-04T22:36:28.252000",
    },
    {
      "photo_create_date": "2015-12-30T18:06:34.511000",
    }
  ]
}

知道如何修复此问题或者这是GAE搜索API的限制吗?

2 个答案:

答案 0 :(得分:1)

看起来好像,这似乎是我必须推出自己的解决方案的一个错误。这是我使用的:

create_date_aware = pytz.utc.localize(item.create_date)
epoch_datetime = datetime.datetime(1970, 1, 1, tzinfo=pytz.utc)
create_timestamp = (create_date_aware - epoch_datetime).total_seconds()

您所要做的就是将此值存储为NumberField,并且效果非常好。在弄清楚如何做到这一点时,有一些功劳归于这个问题:

python - datetime with timezone to epoch

以下是我向Google提交的错误:

https://code.google.com/p/googleappengine/issues/detail?id=12650&thanks=12650&ts=1452021081

他们拒绝了这项工作,因此我创建了一个功能请求:

https://code.google.com/p/googleappengine/issues/detail?id=12651&thanks=12651&ts=1452038680

答案 1 :(得分:0)

这是documented behaviour

虽然看起来你已经有了解决方法,但你有几个选择:

  • 自纪元以来以秒为单位存储数字
  • 自纪元以来以毫克为单位存储数字,但是您需要至少除以1000以便能够适合搜索索引中可用的数值范围
  • 使用多个字段(日期,时间,可能是时区)

如果您需要保留时区,则需要使用多字段方法,以时间/毫秒为单位的规范形式进行比较。