Cloudsearch 范围因负整数而失败
Cloudsearch range failing for negative integers
我在 Amazon 的云搜索中有记录,这些记录的时间戳为 int
,表示自纪元以来的毫秒数。我称该字段为 time
。对于 1970 年之前的日期,这可能是负数。当我使用 time:[0,}
执行结构化查询时,它返回负数和正数时间戳,这是错误的。文档说 int 是 64 位签名的,所以我不明白为什么这无效。我的查询语法适用于其他只有正值的字段。范围搜索实际上仅限于正数吗?
(旁白:我知道我可以使用日期字符串格式,但我想使用整数来与我系统的其他部分保持一致。我还希望能够表示 BCE 日期,但我不确定当 YYYY 为负数时,YYYY:MM:DD 格式是否安全。)
事实证明,如您所料,Cloudsearch 查询可以很好地处理负数。我的问题是我之前将此字段定义为 text
字段(并且文本比较不会按数字顺序排列字符串,如“123”、“-555”、“-1”等)我d 将字段更改为 int
,但我忘记重新索引,所以 Cloudsearch 仍然秘密地将其视为 text
。
要在更改字段类型后重新编制索引,您可以使用:
aws cloudsearch index-documents --domain-name mycloudsearch
或者您可以从网络界面完成。
我在 Amazon 的云搜索中有记录,这些记录的时间戳为 int
,表示自纪元以来的毫秒数。我称该字段为 time
。对于 1970 年之前的日期,这可能是负数。当我使用 time:[0,}
执行结构化查询时,它返回负数和正数时间戳,这是错误的。文档说 int 是 64 位签名的,所以我不明白为什么这无效。我的查询语法适用于其他只有正值的字段。范围搜索实际上仅限于正数吗?
(旁白:我知道我可以使用日期字符串格式,但我想使用整数来与我系统的其他部分保持一致。我还希望能够表示 BCE 日期,但我不确定当 YYYY 为负数时,YYYY:MM:DD 格式是否安全。)
事实证明,如您所料,Cloudsearch 查询可以很好地处理负数。我的问题是我之前将此字段定义为 text
字段(并且文本比较不会按数字顺序排列字符串,如“123”、“-555”、“-1”等)我d 将字段更改为 int
,但我忘记重新索引,所以 Cloudsearch 仍然秘密地将其视为 text
。
要在更改字段类型后重新编制索引,您可以使用:
aws cloudsearch index-documents --domain-name mycloudsearch
或者您可以从网络界面完成。