今天学习了SpringBoot整合ES(Elasticsearch,以下简称ES),ES是一个分布式全文搜索引擎,接下来介绍SpringBoot整合ES。本人用的是idea操作,首先得下载ES数据库才能有以后操作。
首先在springboot项目的pom文件中导入相关依赖,如下:(springboot源码自带版本)
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>
其次整合和实现一起用,本人是在项目的测试单元使用:
@SpringBootTest class Springboot17EsApplicationTests { @Autowired private BookDao bookDao; private RestHighLevelClient client; //此处没有配置,故不能用@Autowired
//对client初始化,每个方法运行前执行 @BeforeEach void setUp() { HttpHost host = HttpHost.create("http://localhost:9200"); RestClientBuilder builder = RestClient.builder(host); client = new RestHighLevelClient(builder); } //运行后释放client资源,每个方法运行后执行 @AfterEach void tearDown() throws IOException { client.close(); }
//创建索引 @Test void testCreateIndex() throws IOException { CreateIndexRequest request = new CreateIndexRequest("books"); client.indices().create(request, RequestOptions.DEFAULT); }
//添加文档 @Test void testCreateDoc() throws IOException { Book book = bookDao.selectById(1); IndexRequest request = new IndexRequest("books").id(book.getId() + ""); String json = JSON.toJSONString(book); request.source(json,XContentType.JSON); client.index(request,RequestOptions.DEFAULT); }
@Test //按id查询 void testGet() throws IOException { GetRequest request = new GetRequest("books","1"); GetResponse response = client.get(request,RequestOptions.DEFAULT); String json = response.getSourceAsString(); System.out.println(json); }
@Test //按条件查询 void testSearch() throws IOException { SearchRequest request = new SearchRequest("books"); //查询某个索引 SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.termQuery("name","java")); //设置条件 request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); SearchHits hits = response.getHits(); for (SearchHit hit : hits) { String source = hit.getSourceAsString(); Book book = JSON.parseObject(source, Book.class); System.out.println(book); } } }
欢迎大家一起来学习,有不足的地方还请批评指出。