在我的 Web 应用程序中,用户的能力数据可以按 0-5 的排名存储。使用 Hibernate 搜索(建立在 Lucene 之上),我希望构建一个查询来查找所有具有能力 X 且具有最低排名 A 的用户,例如排名 3 的 Java。此外,我希望在结果中提高排名,将排名 4 的用户放在排名 3 的用户之前。我觉得这应该是可能的,但我不知道如何组合子对象中的字段。我的数据结构看起来像这样(简化):
用户类
@Entity
@Table(schema = "COMPETENCE", name = "users")
@Indexed
public class User{
@Id
@Field(store = Store.YES, index = Index.UN_TOKENIZED)
private Long id;
@OneToMany(mappedBy = "user")
@IndexedEmbedded
private List<UserCompetence> competenceList= new ArrayList<UserCompetence>();
// Snip: Other irrelevant fields and get/setters
}
用户能力类
@Entity
@Table(name = "user_competence")
public class Competence {
@ManyToOne
@JoinColumn(name = "user_id", referencedColumnName = "id")
@NotNull
@ContainedIn
private User user;
@ManyToOne
@JoinColumn(name = "competence_id", referencedColumnName = "id")
@NotNull
@IndexedEmbedded
private Competence competence;
@Basic
@Field(index = Index.UN_TOKENIZED, store = Store.YES)
@NumericField
private Integer level;
// Snip: Other irrelevant fields and get/setters
}
@Entity()
@Table(name = "competence")
public class Competence{
@Column(name = "name")
@Field(index = Index.TOKENIZED, store = Store.YES)
private String name;
// Snip: Other irrelevant fields and get/setters
}
当我尝试构建一个强制某个能力和最低级别的查询时,它似乎找到了所有具有该能力的人以及具有指定级别的任何能力。如何使其仅返回具有正确 UserCompetence 子级的用户?我怀疑我需要重新映射我的一些索引才能完成这项工作。