【发布时间】:2020-06-10 10:45:38
【问题描述】:
鉴于此域模型:
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();
这会返回什么:
- 具有 React 技能的用户(无论级别如何)AND
- 拥有高级或更高技能的用户(无论技能名称如何)。
我期望它返回的结果:
- 拥有高级或更高 React 技能的用户。
【问题讨论】:
标签: java hibernate lucene hibernate-search