休眠Elasticsearch中的脚本字段

时间:2018-12-13 11:32:21

标签: java elasticsearch hibernate-search

我使用的是hibernate-search-elasticsearch 5.8.2.Final,我不知道如何获取脚本字段:

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-script-fields.html

有什么方法可以完成此功能?

1 个答案:

答案 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];
}

请参见this section of the documentation