首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringBoot弹奏搜索RestHighLevelClient Java

SpringBoot弹奏搜索RestHighLevelClient Java
EN

Stack Overflow用户
提问于 2018-02-10 18:05:01
回答 1查看 2.6K关注 0票数 0

我正在跟踪这个教程,一切都很好。除了我想增加一些额外的搜索功能。

我有以下文档是我的ElasticSearch6.1索引:

代码语言:javascript
复制
{
    "author": "georges",
    "price": 99.1,
    "id": "06e68109-504a-44d6-bf2e-0debb12c984d",
    "title": "Java Always"
}

我的Spring应用程序运行在端口8080上。我知道如何在postman中使用以下API插入数据:127.0.0.1:8080/books,还知道如何通过E Java高级Rest提供的GET请求获得带有ID 127.0.0.1:8080/books/06e68109-504a-44d6-bf2e-0debb12c984d的书籍

代码语言:javascript
复制
    //This works perfectly thank you

@Repository
public class BookDao {
 private final String INDEX = "bookdata";
 private final String TYPE = "books";
 private RestHighLevelClient restHighLevelClient;

    ...

 public Map<String, Object> getBookById(String id) {
 GetRequest getRequest = new GetRequest(INDEX, TYPE, id);
 GetResponse getResponse = null;
 try {
      getResponse = restHighLevelClient.get(getRequest);
      } catch (java.io.IOException e) {
       e.getLocalizedMessage();
       }
       Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
                    return sourceAsMap;
       }

问题是:我如何通过作者搜索这本书?

我尝试过完全相同的实现,但它不能工作,因为GetRequest只通过文档id获取文档

代码语言:javascript
复制
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;
    }

我的控制器:

代码语言:javascript
复制
import java.util.Map;

import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.gvh.es.rest.es6rest.dao.BookDao;
import com.gvh.es.rest.es6rest.model.Book;

@RestController
@RequestMapping("/books")
public class BookController {

    private BookDao bookDao;

    public BookController(BookDao bookDao) {
        this.bookDao = bookDao;

    }



    @GetMapping("/{id}")
    public Map<String, Object> getBookById(@PathVariable String id){

      return bookDao.getBookById(id);
    }


    @PostMapping
    public Book insertBook(@RequestBody Book book) throws Exception {
      return bookDao.insertBook(book);
    }

    @PutMapping("/{id}")
    public Map<String, Object> updateBookById(@RequestBody Book book, @PathVariable String id) {
      return bookDao.updateBookById(id, book);
    }

    @DeleteMapping("/{id}")
    public void deleteBookById(@PathVariable String id) {
      bookDao.deleteBookById(id);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-09 12:03:50

我也遇到了这个问题,这就是我的解决办法。它适用于我的代码。更改用户名和密码,我认为它可能会工作。

代码语言:javascript
复制
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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48723949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档