给出此域模型:
class User { // <- this is the root entity
@IndexedEmbedded
private Set<UserSkill> skills = new HashSet<>();
}
class UserSkill {
@IndexedEmbedded
private Skill skill;
@Enumerated
@Field(bridge = @FieldBridge(impl = EnumAsIntegerBridge.class))
private UserSkillLevel level;
}
class Skill {
@Field
private String name;
}
如何将范围查询与术语查询结合使用来搜索具有给定级别特定技能的用户?
我尝试此查询来寻找具有高级React技能的用户:
var q = new BooleanQuery.Builder();
q.add(queryBuilder.keyword().onField("skills.skill.name").matching("React").createQuery(), BooleanClause.Occur.MUST);
q.add(queryBuilder.range().onField("skills.level").above(UserSkillLevel.ADVANCED.ordinal()).createQuery(), BooleanClause.Occur.MUST);
var finalQuery = q.build();
返回的内容:
我希望它返回的内容:
给出此域模型:类User {//技能=新的HashSet <>(); }类UserSkill {@IndexedEmbedded ...
在您的查询中,您从未提到两个限制(技能名称和技能级别)必须应用于同一技能。这就是为什么您得到此结果。