默认支持两种技术和es交互

1.jest的方式

1.1前提

这里有个大的前提,就是springboot的版本不能太高。必须是1.5版本的。因为2.x版本的springboot已经没有这个jest的自动配置了。

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.12.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>

1.2pom引入依赖

  1. <!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
  2. <dependency>
  3. <groupId>io.searchbox</groupId>
  4. <artifactId>jest</artifactId>
  5. <version>5.3.4</version>
  6. </dependency>

1.3设置es请求地址

在application.properties配置文件中设置

  1. spring.elasticsearch.jest.uris=http://120.78.152.93:9200/

1.4测试

1.4.1插入一个对象到es中

新建一个Article类,其中 @JestId是设置主键的意思。

  1. @Data
  2. public class Article {
  3. @JestId
  4. private Integer id;
  5. private String title;
  6. private String desc;
  7. private String context;
  8. }
  1. @Autowired
  2. JestClient jestClient;
  3. @Test
  4. public void testEs(){
  5. Article article=new Article();
  6. article.setId(1);
  7. article.setDesc("hello es");
  8. article.setContext("第一个es");
  9. //构建一个索引
  10. Index build = new Index.Builder(article).index("jf3q").type("news").build();
  11. try {
  12. //执行
  13. jestClient.execute(build);
  14. }catch (IOException e){
  15. e.printStackTrace();
  16. }
  17. }

image.png

1.4.2全文搜索

  1. // 测试搜索
  2. @Test
  3. public void testSearch(){
  4. //查询表达式
  5. String json="{\n" +
  6. " \"query\" : {\n" +
  7. " \"match_phrase\" : {\n" +
  8. " \"desc\" : \"hello\"\n" +
  9. " }\n" +
  10. " }\n" +
  11. "}";
  12. //构建搜索功能
  13. Search search = new Search.Builder(json).addIndex("jf3q").addType("news").build();
  14. try {
  15. SearchResult result = jestClient.execute(search);
  16. System.out.println(result.getJsonString());//打印json字符串
  17. }catch (Exception e){
  18. e.printStackTrace();
  19. }

2.springdata ElasticSeach的方式

这里注意下springboot要和es的版本匹配才行。
image.png
image.png

2.1pom引入依赖

我这里用的springboot版本是的1.5.12,然后我的elasticsearch的版本是2.4.6的。springdata es版本是2.1.11

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.12.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  4. </dependency>

2.2配置es的地址

在application.properties配置文件中设置

  1. spring.data.elasticsearch.cluster-name=elasticsearch
  2. spring.data.elasticsearch.cluster-nodes=120.78.152.93:9300

2.3两种方式操作es

参考文档:https://github.com/spring-projects/spring-data-elasticsearch

  1. elasticsearchTemplate 操作es
  2. 编写一个ElasticsearchRepository 的子接口来操作ES:
    1. 先新建一个BookRepository ```java public interface BookRepository extends ElasticsearchRepository { //自定义方法 public List findByBooeNameLike(String bookName); }
  1. 2. 新建Book实体
  2. ```java
  3. @Document(indexName="jf3q",type = "book")
  4. @Data
  5. public class Book {
  6. private Integer id;
  7. private String booeName;
  8. private String author;
  9. }
  1. 测试类
    1. @Autowired
    2. BookRepository bookRepository;
    3. @Test
    4. public void test(){
    5. // Book book=new Book();
    6. // book.setAuthor("杰凡IT");
    7. // book.setId(1);
    8. // book.setBooeName("有偿问答");
    9. // bookRepository.index(book);
    10. for (Book book : bookRepository.findByBooeNameLike("问")) {
    11. System.out.println(book);
    12. }
    13. }