我使用的是hibernate-search-elasticsearch 5.8.2.Final,我不知道如何获取脚本字段:
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-script-fields.html
有什么方法可以完成此功能?
答案 0 :(得分:0)
在Hibernate Search 5.8中是不可能的。
在Hibernate Search 5.10中,您可以获取direct access to the REST client,向弹性搜索发送REST请求,并以JSON字符串的形式获取结果,您必须自行解析,但这是非常低级的,您将无益完全可以从Hibernate Search搜索API中获得(无需查询DSL,无需加载托管实体,无需直接翻译实体类型=>索引名称,...)。
如果您想为该功能提供更好的支持,请随时在our JIRA上打开一张票,详细描述您想要实现的目标以及希望达到的目标。我们目前正在研究Search 6.0,它将带来很多改进,尤其是在使用Elasticsearch的本机功能方面,因此我们可以将其纳入积压中。
编辑:我忘了提一下,尽管您不能使用服务器端脚本,但仍可以从文档中获取完整的源代码,并在应用程序中进行一些解析以达到相似的结果。即使在Search 5.8中也可以使用:
FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(entityManager);
FullTextQuery query = fullTextEm.createFullTextQuery(
qb.keyword()
.onField( "tags" )
.matching( "round-based" )
.createQuery(),
VideoGame.class
)
.setProjection( ElasticsearchProjectionConstants.SCORE, ElasticsearchProjectionConstants.SOURCE );
Object[] projections = (Object[]) query.getSingleResult();
for (Object projection : projections) {
float score = (float) projection[0];
String source = (String) projection[1];
}