当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring数据Elasticsearch ElasticsearchRepository获取突出显示

谈秦斩
2023-03-14

我正在使用Spring Elasticsearch chRepository来查询Elasticsearch:

@Repository
public interface MyDocumentRepository extends ElasticsearchRepository<MyDocument, String>{

}

我可以成功运行搜索查询并检索映射到MyDocument bean中的elasticsearch结果列表

private final MyDocumentRepository myDocumentRepository;

...

Pageable pageable = PageRequest.of(0, 10);
QueryBuilder query = QueryBuilders.boolQuery().must(queryStringQuery("my query"));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withQuery(query)
        .withPageable(pageable)
        .withHighlightFields(
                new HighlightBuilder.Field("field1"),
                new HighlightBuilder.Field("field2"))
                .build();

Iterable<MyDocument> = myDocumentRepository.search(searchQuery);

虽然发送到elasticsearch和响应的查询是正确的(我可以在调试日志中看到突出显示块)并且结果也合适,但我不知道如何在我的java代码中获取突出显示信息。

我不想使用ElasticsearchTemplate和ResultTextRactor来获取突出显示信息。

提前感谢!

共有2个答案

夹谷和韵
2023-03-14

实际上,如果您得到ES响应,您将拥有一个SearchHit对象。这个SearchHit对象只表示ES结果的HTTP响应。

如果您的结果命中突出显示的字段,SearchHit提供Map的Map

郑向阳
2023-03-14

SearchHit中返回附加信息是在当前master分支中实现的一项功能,可在snaphotbuild中使用。它将与下一个版本(4.0)一起发布

这不是Elasticsearch中的SearchHit类,而是Spring Data Elasticsearch中引入的一个新类。

在当前版本(3.2.x)中,只能使用自定义结果映射器(在4.0中不再可用)

编辑:

关于即将发布的版本4中的配置,请检查https://docs.spring.io/spring-data/elasticsearch/docs/current-SNAPSHOT/reference/html/#elasticsearch.clients.rest

通过此配置,您可以将一个ElasticsearchOperations实例注入到您的代码中,此bean在AbstractElasticsearchConfiguration类中定义。必要的代码片段:

@Autowired ElasticsearchOperations operations;

...

SearchHits<MyDocument> searchHits = operations.search(searchQuery,
                                        MyDocument.class,
                                        IndexCoordinates.of("index-name");

关于返回数据检查的更多信息https://docs.spring.io/spring-data/elasticsearch/docs/current-SNAPSHOT/reference/html/#elasticsearch.operations.searchresulttypes

我们知道在版本4.0中有很多反对意见和一些突破性的更改,但我们将有一个更干净的API,我们将有可能返回所有这些搜索结果元数据,这在3.2中是不可能的

 类似资料:
  • 问题内容: 似乎SpringData ES不提供类来获取ES返回的突出显示。Spring Data可以返回对象列表,但是ES返回的Json中的高亮部分位于单独的部分中,该部分未由“ ElasticSearchTemplate”类处理。 代码示例:- 我可能是错的,但是我无法弄清楚仅使用SpringDataES。有人可以发布一个示例,说明如何使用Spring Data ES获得亮点吗? 提前致谢 !

  • 问题内容: 有人可以通过可以在网页上突出显示文本的JavaScript函数来帮助我。要求是-仅突出显示一次,而不是像我们在搜索情况下那样突出显示所有出现的文本。 问题答案: 您可以使用jquery 突出显示效果。 但是,如果您对原始javascript代码感兴趣,请看一下我得到的内容。将复制粘贴到HTML中,打开文件,然后单击“突出显示”-这应该突出显示“ fox”一词。在性能方面,我认为这适用于

  • 我有一个使用Spring3.1的web应用程序。1.我们有一个使用JdbcTemplate的genericDao。数据源在GenericDaoImpl中是这样注入的。 这是一把简单的刀。 目前,凭借独特的数据源,它工作得非常完美。applicationContext配置了注释。 现在我必须集成一个新的DAO,仍然使用通用道,但在另一个数据库上工作(所以是另一个数据源)。 我在服务中使用@Trans

  • 我使用Spring引导,Spring数据JPA,我正在寻找解决方案,以获得给定表的所有列名。但没能按我的要求找到 不需要本机查询的解决方案。正在寻找使用spring数据抽象的通用解决方案。 我可以使用普通java获取列名,但我想使用spring数据JPA获取它们。

  • 我正在测试一个基于酒店搜索的场景。所以我做了3个模型类,分别是酒店、房间和可用性 下面是我们正在使用的三个模型类。 Hotel.java @文档(集合="酒店")公共类酒店{ } Room.java @文件(收集=“房间”)公共教室{ } 可利用性Java语言 @文件(收集=“房间”)公共类可用性{ } 这些存储在两个mongodb集合中,一个用于酒店,另一个用于房间和可用性。 下面是我们从中提取

  • 问题内容: 如何从中加载数据并返回Map接口。如何在内部维护查询数据。我尝试加载,但出现以下异常,即 org.springframework.dao.IncorrectResultSizeDataAccessException:错误的结果 码:- 请帮我 问题答案: 如果您想获得一行,则比较合适。您选择的是无子句,因此您可能想要。该错误可能表明需要一行,但您查询的却是很多行。 查看文档。 有一个只