我有一个应用程序,用于存储和索引Google Datastore中的数字字段.在内部,这些是使用
Java / Objectify创建和索引的,实体是使用@Index注释持久注释我们希望搜索的字段…
@Index
private Long fieldOne;
@Index
private Long fieldTwo;
一切正常,直到我尝试使用这些索引字段搜索实体. fieldOne的值为5709068098338816,使用GQL搜索就可以了:
SELECT *
FROM MyEntity
WHERE fieldOne = 5709068098338816
但是,fieldTwo的值为3572054303678568400,这就是我的问题的起点.出于某种原因,我无法在GQL或使用objectify中使用此值进行搜索.即使我可以在google datastore中看到值,以下GQL也不会返回结果:
SELECT *
FROM MyEntity
WHERE fieldTwo = 3572054303678568400
我可以看到这是在Google Datastore中存储和索引的.
我的问题是,Google Datastore中索引号码的大小是否有限制?这个值是否可能以某种方式大到正确索引或者我是否完全错过了其他内容?此值低于最大Long值,因此我不确定发生了什么.
任何帮助将非常感激.
干杯!
最佳答案 这可能是由于你的fieldTwo超过16位数. App Engine数据存储区可以对主键使用Long值 – 但在下面链接的文档中 – 它指出:
Each ID can be up to 16 decimal digits long.
您的字段不是主键,但我猜它在索引时遵循与Long PrimaryKey相同的模式.
https://cloud.google.com/appengine/docs/java/datastore/entities