如何在Hibernate Search中将范围查询与关键字查询结合在一起?

问题描述 投票:0回答:1

给出此域模型:

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
  • 具有高级技能或更高技能的用户(与技能名称无关)。>>
  • 我希望它返回的内容:

  • 具有更高或更高反应技能的用户。

给出此域模型:类User {//技能=新的HashSet <>(); }类UserSkill {@IndexedEmbedded ...

java hibernate lucene hibernate-search
1个回答
0
投票

在您的查询中,您从未提到两个限制(技能名称和技能级别)必须应用于同一技能。这就是为什么您得到此结果。

© www.soinside.com 2019 - 2024. All rights reserved.