考虑更复杂的实体结构,如
class Entity {
Float valueA;
Float valueB;
List<Property> properties;
}
class Property {
Long id;
Float value;
}
我现在正试图找出一个像(Pseudo sql)这样的查询的索引结构:
select entity where valueA >= x and valueB < y and properties contains
((id = a, value >= b) and (id = c, value = d))
我面临的问题是:
到目前为止,我有一个想法出现在我脑海中:
我可以使用所有属性的关系索引模式。例如。创建以下实体:
class ValueA/ValueB {
@Parent
Key<Entity> parent;
@Id
Long id = 1L;
@Index
Float minValue;
}
并更改Property类,如
class Property {
@Parent
Key<Entity> parent;
@Id
Long id;
@Index
Float value;
}
然后我可以对每个相关的索引类进行查询,并保留那些符合所有标准的实体的父键。
这样做很难有效,而且很容易变得非常昂贵。
我可以尝试其他任何解决方案吗?
提前致谢!
答案 0 :(得分:1)
我会在搜索Api中存储我的实体的非规范化副本,这样可以进行更灵活的查询。
确保搜索Api的结果包含实体的ID。
最后,使用Objectify执行keys()查询以获取结果的实际实体。