如何在hibernate Lucene搜索中使用投影

如何在hibernate Lucene搜索中使用投影,第1张

如何在hibernate Lucene搜索中使用投影

如HibernateSearch文档中所述:

投影不适用于通过@IndexedEmbedded索引的集合或地图

因此,在您的情况下,尝试

jobSeekerSkills.skills.skill
通过
jobSeekerSkills
进行索引,并在上进行投影
@IndexedEmbedded
不是一个好主意。

我想指出的是,由于您仅在数字字段上执行关键字查询,因此最好只使用Hibernate ORM进行经典的JQPL / SQL查询。

无论如何,如果出于某种原因您 真的 想使用Hibernate
Search,那么从查询中判断,您无需在集合上进行投影。相反,只需

@IndexedEmbedded(includePaths ="includePaths")
向的
jobSeeker
属性添加
JobSeekerSkills
,然后重新处理查询以将实体的索引作为目标
JobSeekerSkills

    FullTextSession fullTextSession = Search.getFullTextSession(session);    fullTextSession.createIndexer().startAndWait();    QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(JobSeeker.class).get();    Query query = null;    for (String string : skills) {        query = qb.keyword().onField("skills.skillIdPk").matching(Integer.parseInt(string)).createQuery();    }    org.hibernate.search.FullTextQuery query1 = fullTextSession.createFullTextQuery(query, JobSeeker.class);        query1.setProjection("jobSeeker.jobSeekerId", "skills.skill");        List results = query1.list();        for (int i = 0; i < results.size(); i++) { Object[] object = (Object[]) results.get(i); System.out.println(object[0]); System.out.println(object[1]);        }    //  List<Skills> authorName1 = (List<Skills>) firstResult[1];    //  System.out.println(authorName1);    return results;

注意:

includePaths
新上的on
@IndexedEmbedded
仅是必需的,因为您已经
@IndexedEmbedded
在关联(
JobSeeker.jobSeekerSkills
)的反面了;它避免了无限递归(JobSeeker.jobSeekerSkills.jobSeeker.jobSeekerSkills.jobSeeker.jobSeekerSkills…)。如果删除
@IndexedEmbedded
on
JobSeeker.jobSeekerSkills
,则也可以删除
includePaths
on
@IndexedEmbedded



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5015025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存