【问题标题】:Query an IndexedEmbedded list of Enumerated (enum) with Hibernate Search使用 Hibernate Search 查询 Enumerated (enum) 的 IndexedEmbedded 列表
【发布时间】:2023-04-09 19:44:01
【问题描述】:

我有下面的模型,我正在尝试使用 Hibernate Search 进行全文搜索。

我需要在“关于”字段中搜索所有具有 UserRole.PROFESSIONIST 角色的用户。

这是模型:

@Entity
@Indexed
public class User
{
    @Id
    @GeneratedValue
    Long id;

    ...

    String about;

    @IndexedEmbedded
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = UserRole.class, fetch = FetchType.EAGER)
    @JoinTable(name = "user_roles", joinColumns = {@JoinColumn(name = "user_id")})
    List<UserRole> roles = new ArrayList<>();
}    

这是查询:

List results = new ArrayList<>();

org.apache.lucene.search.Query containText = queryBuilder
    .keyword()
    .onField("about")
    .matching(text)
    .createQuery();

org.apache.lucene.search.Query isProfessionist = queryBuilder
    .keyword()
    .onFields("roles")
    .matching(UserRole.PROFESSIONIST.toString())
    .createQuery();

org.apache.lucene.search.Query query = queryBuilder
    .bool()
    .must(containText)
    .must(isProfessionist)
    .createQuery();

org.hibernate.search.jpa.FullTextQuery jpaQuery = fullTextEntityManager.createFullTextQuery(query, User.class);

results = jpaQuery.getResultList();

当我执行查询时出现此错误:

org.hibernate.search.exception.SearchException: Unable to find field roles in com.plusimple.core.models.User

我正在尝试做的事情可能吗?如果是,我做错了什么?

【问题讨论】:

    标签: java spring hibernate lucene hibernate-search


    【解决方案1】:

    由于目标类是一个枚举,您必须将@Field 注释添加到您想要搜索的属性(嵌入完整实体时不需要这样做,因为它们有自己的子属性将是可搜索的)。

    例子:

    @IndexedEmbedded
    @Field(name="roles", analyze=Analyze.NO, index=Index.YES)
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = UserRole.class, fetch = FetchType.EAGER)
    @JoinTable(name = "user_roles", joinColumns = {@JoinColumn(name = "user_id")})
    List<UserRole> roles = new ArrayList<>();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多