繁体   English   中英

hibernate 搜索 - 获取复合中的实体 ID

[英]hibernate search - get entity id in composite

我想创建一个组合并将实体 id(数据库中的那个)添加为属性。 我尝试使用 f.id() 但我不能 map 它很长而且它似乎是 elasticsearch 中的文档 ID 而不是数据库索引。 这是我的代码。

List<GlobalSearchResult> hits = searchSession.search(Searchable.class)
 .select(f -> f.composite(
    GlobalSearchResult::new,
    f.id(),
    f.field("searchType", String.class),
    f.field("searchName", String.class),
    f.field("searchDescription", String.class),
    f.score()
  ))
 .where(f -> f.simpleQueryString().fields(INDEXED_FIELDS).matching(q))
 .fetchHits( 20 );

是否有一种聪明、优雅的方式将 id 输入 GlobalSearchResult 或者我必须获取实体和 map 吗? 这将是很多样板代码,因为我有许多实现 Searchable 的类。

谢谢您的帮助!

您的代码片段返回文档 ID,但默认情况下与实体 ID 相同,因此这对您来说应该可以正常工作,除非您有一个奇异的映射。

假设所有目标类型的 ID 确实是 Long,您只需将Long.class传递给id()即可将 ID 作为 long 检索:

List<GlobalSearchResult> hits = searchSession.search(Searchable.class)
 .select(f -> f.composite(
    GlobalSearchResult::new,
    f.id(Long.class),
    f.field("searchType", String.class),
    f.field("searchName", String.class),
    f.field("searchDescription", String.class),
    f.score()
  ))
 .where(f -> f.simpleQueryString().fields(INDEXED_FIELDS).matching(q))
 .fetchHits( 20 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM