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

弹性搜索结果到POJO

邹高懿
2023-03-14

我使用的是spring数据elasticsearch(4.0版)。现在,我需要将rest高级客户端的搜索结果转换为POJO对象。

我会使用杰克逊图书馆的ObjectMapper。我相信有更好的方法来做到这一点。

Spring data elasticsearch now(4.0版)使用MappingElasticsearchConverter。不幸的是,我不知道如何做到这一点-我没有看到任何相关文档。

实体

@Document(indexName="addresses")
public class Address {

    @Id
    private String uam;

    @Field
    private String street;

    ....
}

我只需要将SearchHits转换为地址实体

@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles(profiles = "dev")
public class TestElasticSearch {


    @Autowired
    private RestHighLevelClient highLevelClient;

    @Test
    void convertToPojo() throws Exception {
        SearchRequest searchRequest = new SearchRequest();
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        SearchHit[] hits = searchResponse.getHits().getHits();

        Arrays.stream(hits).map(hit -> hit.toString()).forEach(System.out::println);
    }

共有3个答案

季嘉良
2023-03-14

我有另一个解决方案,对我来说很好,当你需要一个复杂的查询时,你可以使用

template.getElasticsearchConverter().read(YourPOJOClass.class, DocumentAdapters.from(hit));

其中模板是一个组织。springframework。数据elasticsearch。果心ElasticsearchRestTemplate您可以将其注入到类中。

陆绪
2023-03-14

SearchHits类扩展了Streamable类,因此,如果您使用leiblix所说的ElasticsearchOperations,您甚至不需要对其调用流()

    public <T> List<T> search(Query query, Class<T> clazz) {
        return elasticsearchOperations.search(query, clazz).map(SearchHit::getContent).toList();
    }
高修筠
2023-03-14

正如P.J.Meisch所提到的,使用ElasticsearchOperations更好

void convertToPojo() {
    SearchHits<Address> hits = operations.search(Query.findAll(), Address.class);
    List<Address> addresses = hits.stream().map(hit -> hit.getContent()).collect(Collectors.toList());
}
 类似资料:
  • 我已经使用ES一段时间了,但今天不起作用。我重新创建了docker compose(smt可以在那里吗?),以下是我在ES中获得的数据: 编辑:这是我的输入(这里我有\u source=False) 架构: 具有“全部匹配”查询的文档(部分): 现在查询: 退货 知道问题出在哪里吗? 编辑:使用curl查询{“query”:{“bool”:{“must”:[{“match”:{“integer”:

  • 目前,我正在将弹性搜索命中映射到POJO,然后再次将其保存在列表中。 是否有一种方法可以直接将弹性结果映射到内容POJO列表,而无需从Search Hit迭代它。

  • 我有一个使用spring数据elasticsearch库的项目。我的系统返回了结果,但我想知道如何以域POJO类的形式获得结果。 我没有看到太多关于如何实现这一点的文档,但我不知道应该在谷歌上搜索什么正确的问题。 目前,我的代码是这样的,在我的测试中,它检索正确的结果,但不是作为POJO。 非常感谢您的帮助。

  • 我已经完成了名称索引。它包含椅子、椅子等数据。 当我尝试用“cha”搜索时,它不会返回任何椅子。这是返回“毛毯”,我期待的文件有椅子。 下面是我的代码: 搜索请求: 搜索响应: } 映射: 我该怎么解决这个问题? 谢谢,Sri

  • 我正在使用批量请求执行弹性搜索完整索引。我在索引过程中遇到了一个问题,结果是空的。由于我正在完整索引期间删除索引,因此如何处理这种情况。 我已经完成了以下步骤: 删除索引 创建索引 创建映射 批量请求 索引属性和映射: } 我有大约7.5万份文件。 谢谢,Sree。

  • 我需要对以搜索词开头的搜索结果进行优先级排序。我用了“匹配短语前缀”。我用了“匹配短语前缀”。但它不起作用。 细节: > 质疑 结果