这个报错困扰了我好久,刚接触编程这东西,请热心人帮我看一看指点一下!
无法解析,即系统没有找到这个方法,所以报错!
该回答引用GPT:在您提供的代码中,有一些错误。这是一个修复后的代码:
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] searchHits = searchResponse.getHits().getHits();
ArrayList<Map<String, Object>> list = new ArrayList<>();
for (SearchHit hit : searchHits) {
Map<String, Object> sourceMap = hit.getSourceAsMap();
list.add(sourceMap);
}
return list;
这里主要进行了以下更改:
1.searchRequest.getHits()应该更改为searchResponse.getHits(),因为searchRequest只是请求对象,而searchResponse是响应对象。
2.documentFields应该更改为hit,因为它是for循环中的当前迭代对象。
3.getSourceAsMapO应该更改为getSourceAsMap(),因为后者是正确的方法名称。
希望这可以解决您的问题。
应该是返回值Response来getHits(),而不是请求Request。
参考这个:
https://blog.csdn.net/qq_32403063/article/details/102556739
https://blog.csdn.net/jassyzhen/article/details/117123023
用这个返回值遍历
系统没有找到这个方法,报错!
这段代码是使用 Elasticsearch 的 Java 客户端对 Elasticsearch 进行搜索操作,并将结果解析为一个包含 Map 的 ArrayList。
具体来说,这段代码使用了 SearchSourceBuilder 来构建搜索请求。在这个搜索请求中,使用了 TermQueryBuilder 来进行精确匹配查询,查询的字段为 "title",查询的关键词为 keyword。同时,通过 from 和 size 方法设置了分页的起始位置和每页大小。设置了超时时间为 60 秒。
然后,将 SearchSourceBuilder 对象设置为 SearchRequest 的 source,通过 Elasticsearch 的高级 REST 客户端 restHighLevelClient 执行搜索请求,并将结果解析为一个 ArrayList,其中每个元素都是一个 Map,表示一个文档的字段和对应的值。
最后,将解析后的结果返回给调用者。
需要注意的是,这段代码中可能有一些打字错误,例如 QueryBilders 应该是 QueryBuilders,getHits0 应该是 getHits。
打开这个类,搜索一下有没有这个方法
错误提示:该类未找到这个方法。
正确的结果是 应该在78行 添加返回值SearchResponse 然后变量返回值获取到该方法
SearchResponse searchResponse =restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
searchResponse.getHits().getHits();
作为初学者应该知其然知其所以然,已知问题该类未找到这个方法,应该反过来想是不是这个类错了或者调用的第三jar包版本问题。然后通过思路去解决这个问题。
应该是searchResponse
SearchResponse searchResponse = restTemplate.getClient().search(searchRequest, RequestOptions.DEFAULT);
List<Map<String, Object>> mapList = new ArrayList<>();
for (SearchHit hit : searchResponse.getHits().getHits()) {
list.add(hit.getSourceAsMap());
}
```
在网络请求中 有两个关键的概念 在学习MVC中用的比较多Request
和 Response
即为 请求
和响应
在你的代码中 searchRequest
对应着是请求
而 xxx.getHits()
是期望从响应中获取结果,.search(searchRequest, RequestOptions.DEFAULT)
方法是有返回值的, 返回值为SearchResponse
就是搜索响应
那么 你应该 这样写
// 调用restHighLevelClient 的搜索方法 传入 搜索请求 和选项请求选项 得到 搜索响应
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
// 准备容器接受结果
List< Map<String, Object>> list = new ArrayList<>();
// 遍历搜索响应
for (SearchHit searchHits: searchResponse.getHits().getHits()) {
list.add(searchHits.getSourceAsMap());
}