使用带有关联枚举字段的 hibernate-search 查询结果

query results with hibernate-search with associated enumeration field

我正在尝试为具有以下关联的实体创建文档索引:

文档版本:

@Entity
@Indexed
public class DocVersion implements Serializable {
...
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "doc_uuid")
    @IndexedEmbedded
    private Document2 document2;
...
}

文档 2:

@Entity
@Indexed
public class Document2 implements Serializable {
...
    @Column(name = "entityState")
    @Enumerated(EnumType.STRING)
    @Field(bridge=@FieldBridge(impl=EnumBridge.class), index=Index.YES)
    private EDocState eDocState;
...
}

这是我查询索引的方式(仅用于测试目的):

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
        try {
            fullTextEntityManager.createIndexer().startAndWait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
                .buildQueryBuilder()
                .forEntity(DocVersion.class)
                .get();

        org.apache.lucene.search.Query luceneQuery = queryBuilder.keyword()
                .onField("document2.eDocState").matching("HARD_DEL")
                .createQuery();
List results = fullTextEntityManager.createFullTextQuery(luceneQuery, DocVersion.class)
                .getResultList();

但我得到的不是结果:

WARNING: org.hibernate.search.bridge.BridgeException: Exception while calling bridge#objectToString
    entity class: com.nws.vedica.model.entity.DocVersion
    entity property path: document2.eDocState
    field bridge: TwoWayString2FieldBridgeAdaptor [stringBridge=org.hibernate.search.bridge.builtin.EnumBridge@60942b8b]

那是什么意思呢?我是否需要为 Enumeration 实现一些特定的桥(它看起来像什么)? 这只是值枚举,所以我认为问题出在其他地方。

请协助我获取结果。

我正在使用的包: 休眠搜索 orm:5.9.3.

您不需要实现特定的桥,实际上恰恰相反:桥已经存在,因此 Hibernate Search 希望您将枚举值传递给查询,而您传递的是字符串值。

尝试将 .matching("HARD_DEL") 替换为 .matching(EDocState.HARD_DEL)

注意:我怀疑堆栈跟踪的其余部分会告诉您一些有关 class 转换异常的信息,这可能会提示您。为了您自己的利益,您可能不应该那样隐藏堆栈跟踪,堆栈跟踪可能包含有价值的信息。