我有一个由userId分区的实体(Request)。对于每个userId,我都会有一个索引,对吗?
但是,我想通过userId快速搜索请求。有一个简单的方法吗?或者我需要选择另一个字段来创建分区?
答案 0 :(得分:1)
如果您愿意,可以分两种方式。假设你这样做
public class Request {
@NoSqlId
@NoSqlIndexed
private String uniqueId;
@NoSqlIndexed
@NoSqlPartitionedBy
@NoSqlManyToOne
private User user;
@NoSqlIndexed
@NoSqlPartitionedBy
private LocalDate beginningOfEachMonth;
}
如果您愿意,可以使用私有String userId而不是User。)。
现在,您可以使用月初作为键查询时间分区,只需执行查询,或者可以使用用户作为键查询用户分区。
您的命名查询如果您按两项内容进行分区将是...
query="PARTITIONS("user", :user) SELECT r FROM TABLE as r"
如果您只对用户进行分区,则可以编写
query="PARTITIONS(:user) SELECT r FROM TABLE as r"
注意:您有时需要像我一样索引主键的唯一原因是对主键进行范围查询....对于等于查询,其中pk =某个值,您显然不需要索引因为你可以通过主键本身查找。
迪安