我使用的是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);
}
我有另一个解决方案,对我来说很好,当你需要一个复杂的查询时,你可以使用
template.getElasticsearchConverter().read(YourPOJOClass.class, DocumentAdapters.from(hit));
其中模板是一个组织。springframework。数据elasticsearch。果心ElasticsearchRestTemplate您可以将其注入到类中。
SearchHits类扩展了Streamable类,因此,如果您使用leiblix所说的ElasticsearchOperations,您甚至不需要对其调用流()
public <T> List<T> search(Query query, Class<T> clazz) {
return elasticsearchOperations.search(query, clazz).map(SearchHit::getContent).toList();
}
正如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。
我需要对以搜索词开头的搜索结果进行优先级排序。我用了“匹配短语前缀”。我用了“匹配短语前缀”。但它不起作用。 细节: > 质疑 结果