我们的应用经常需要添加检索功能,开源的ElasticSearch是目前全文搜索引|擎的
首选。他可以快速的存储、搜索和分析海量数据。Spring Boot通过整合Spring
Data ElasticSearch为我们提供了非常便捷的检索功能支持;
Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用
多shard (分片)的方式保证数据安全,并且提供自动resharding的功能,github
等大型的站点也是采用了ElasticSearch作为其搜索服务,
1.索引-数据库
2.类型-表
3.文档-表中的记录
4.属性-列
先看一下对应的目录结构:
<!--SpringBoot默认使用SpringData ElasticSearch模块进行操作--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/io.searchbox/jest --> <dependency> <groupId>io.searchbox</groupId> <artifactId>jest</artifactId> <version>5.3.3</version> </dependency>
这里是在Docker中进行启动并且进行操作 ![1](https://img-blog.csdnimg.cn/20200416170842717.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU2Njk3Nw==,size_16,color_FFFFFF,t_70)
测试一下:出现下面这个界面就是正确运行
3. application.propertiies配置
public interface BookRepository extends ElasticsearchRepository<Book,Integer> { //参照 // https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/ public List<Book> findByBookNameLike(String bookName); }
@RunWith(SpringRunner.class) @SpringBootTest public class Springboot03ElasticApplicationTests { @Autowired JestClient jestClient; @Autowired BookRepository bookRepository; @Test public void test02(){ // Book book = new Book(); // book.setId(1); // book.setBookName("西游记"); // book.setAuthor("吴承恩"); // bookRepository.index(book); for (Book book : bookRepository.findByBookNameLike("游")) { System.out.println(book); } } @Test public void contextLoads() { //1、给Es中索引(保存)一个文档; Article article = new Article(); article.setId(1); article.setTitle("好消息"); article.setAuthor("zhangsan"); article.setContent("Hello World"); //构建一个索引功能 Index index = new Index.Builder(article).index("atguigu").type("news").build(); try { //执行 jestClient.execute(index); } catch (IOException e) { e.printStackTrace(); } } //测试搜索 @Test public void search(){ //查询表达式 String json ="{/n" + " /"query/" : {/n" + " /"match/" : {/n" + " /"content/" : /"hello/"/n" + " }/n" + " }/n" + "}"; //更多操作:https://github.com/searchbox-io/Jest/tree/master/jest //构建搜索功能 Search search = new Search.Builder(json).addIndex("atguigu").addType("news").build(); //执行 try { SearchResult result = jestClient.execute(search); System.out.println(result.getJsonString()); } catch (IOException e) { e.printStackTrace(); } } }
测试结果如下图:
谢谢!,另外希望大家可以多多访问我的个人博客