1

我有一组搜索文档,其中包含我想要排序的 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 的限制吗?

4

2 回答 2

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 - 带有时区的日期时间到纪元

这是我向 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

于 2016-01-05T18:59:10.633 回答
0

这是记录在案的行为

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

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

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

于 2016-01-06T03:10:47.280 回答