我有一个应用程序在 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 进行搜索。即使我可以在谷歌数据存储中看到值,以下 GQL 也不会返回任何结果:
SELECT *
FROM MyEntity
WHERE fieldTwo = 3572054303678568400
我可以看到这已存储在 Google 数据存储区中并已编入索引。
我的问题是,Google Datastore 中索引数字的大小是否有限制?这个值是否有可能太大而无法正确索引,或者我可能完全错过了其他东西?该值低于最大 Long 值,因此我不确定发生了什么。
任何帮助将不胜感激。 干杯!
最佳答案
这可能是由于您的 fieldTwo 长度超过 16 位。 App Engine Datastore 可以为主键使用 Long 值 - 但在下面链接的文档中 - 它指出:
Each ID can be up to 16 decimal digits long.
您的字段不是主键,但我猜它在索引时遵循与 Long PrimaryKey 相同的模式。
https://cloud.google.com/appengine/docs/java/datastore/entities
关于google-app-engine - Google Datastore 中的索引号是否有最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865648/