SpringBoot Elastisearch RestHighLevelClient Java搜索API
我正在关注这一切,一切都很好。 除了我想添加一些额外的搜索功能 我有以下文件是我的Elasticsearch 6.1索引:SpringBoot Elastisearch RestHighLevelClient Java搜索API,java,spring,spring-boot,
elasticsearch,rest-client,Java,Spring,Spring Boot,
elasticsearch,Rest Client,我正在关注这一切,一切都很好。 除了我想添加一些额外的搜索功能 我有以下文件是我的Elasticsearch 6.1索引: { "author": "georges", "price": 99.1, "id": "06e68109-504a-44d6-bf2e-0debb12c984d", "title": "Java Always" } 我的Spring Boot应用程序在端口8080上运行。我知道如何使用postman的以下API插入数据:127.0.0.1
{
"author": "georges",
"price": 99.1,
"id": "06e68109-504a-44d6-bf2e-0debb12c984d",
"title": "Java Always"
}
我的Spring Boot应用程序在端口8080上运行。我知道如何使用postman的以下API插入数据:127.0.0.1:8080/books
,也知道如何使用ID获取图书127.0.0.1:8080/books/06e68109-504a-44d6-bf2e-0debb12c984d
,感谢E-S提供的获取请求:
//这很好用谢谢
@存储库
公共类藏书刀{
私有最终字符串索引=“bookdata”;
私有最终字符串TYPE=“books”;
私有RestHighLevelClient RestHighLevelClient;
...
公共地图getBookById(字符串id){
GetRequest GetRequest=新的GetRequest(索引、类型、id);
GetResponse GetResponse=null;
试一试{
getResponse=restHighLevelClient.get(getRequest);
}捕获(java.io.ioe异常){
e、 getLocalizedMessage();
}
Map sourceAsMap=getResponse.getSourceAsMap();
返回源asmap;
}
问题是:我如何按作者搜索这本书
我尝试了完全相同的实现,但它不起作用,因为GetRequest只通过文档id获取文档
public Map<String, Object> getBookByAuthor(String author) throws IOException {
GetRequest getRequest = new GetRequest(INDEX, TYPE, author);
GetResponse getResponse = null;
try {
getResponse = restHighLevelClient.get(getRequest);
} catch (java.io.IOException e) {
e.getLocalizedMessage();
}
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
return sourceAsMap;
}
公共映射getBookByAuthor(字符串作者)引发IOException{
GetRequest GetRequest=新的GetRequest(索引、类型、作者);
GetResponse GetResponse=null;
试一试{
getResponse=restHighLevelClient.get(getRequest);
}捕获(java.io.ioe异常){
e、 getLocalizedMessage();
}
Map sourceAsMap=getResponse.getSourceAsMap();
返回源asmap;
}
我的控制器:
import java.util.Map;
导入org.springframework.web.bind.annotation.DeleteMapping;
导入org.springframework.web.bind.annotation.GetMapping;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.PostMapping;
导入org.springframework.web.bind.annotation.PutMapping;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RestController;
导入com.gvh.es.rest.es6rest.dao.BookDao;
导入com.gvh.es.rest.es6rest.model.Book;
@RestController
@请求映射(“/books”)
公共类图书管理员{
私家书刀;
公共图书管理员(BookDao BookDao){
this.bookDao=bookDao;
}
@GetMapping(“/{id}”)
公共映射getBookById(@PathVariable字符串id){
返回bookDao.getBookById(id);
}
@邮戳
public Book insertBook(@RequestBody Book)引发异常{
还书刀。插入书(书);
}
@PutMapping(“/{id}”)
公共地图updateBookById(@RequestBody Book,@PathVariable String id){
返回bookDao.updateBookById(id,book);
}
@DeleteMapping(“/{id}”)
public void deleteBookById(@PathVariable字符串id){
bookDao.deleteBookById(id);
}
}
我也遇到了这个问题,这是我的问题解决方案。它与我的代码一起工作。
更改用户名和密码,我认为它可能会起作用
private RestHighLevelClient buildClient() {
try {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("username", "password"));
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200, "http")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
restHighLevelClient = new RestHighLevelClient(builder);
} catch (Exception e) {
logger.error(e.getMessage());
}
return restHighLevelClient;
}
private RestHighLevelClient buildClient() {
try {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("username", "password"));
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200, "http")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
restHighLevelClient = new RestHighLevelClient(builder);
} catch (Exception e) {
logger.error(e.getMessage());
}
return restHighLevelClient;
}