1. 程式人生 > >SpringBoot整合SpringDataElasticSearch操作ES

SpringBoot整合SpringDataElasticSearch操作ES

urn frame native enable for spring node 類型 .repo

(1)、添加starter依賴

1         <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
4         </dependency>

(2)、配置相關屬性

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

*cluster-name可以在ip:9200裏面查看

技術分享圖片

*SpringDataElasticSearch與ES版本之間有相應的適配關系,低版本的SpringDataElasticSearch不兼容高版本的ES。

解決方案:

  1.升級SpringBoot版本

  2.降級ES版本。

(3)、操作ES

  1.第一種方式:使用ElasticsearchRepository,類似於JPA

    1)編寫一個ElasticsearchRepository

  

 1 package
cn.coreqi.repository; 2 3 import cn.coreqi.entities.User; 4 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; 5 6 /** 7 * 第一種方式,類似於JPA,編寫一個ElasticsearchRepository 8 * 第一個泛型為Bean的類型 9 * 第二個泛型為Bean的主鍵類型 10 */ 11 public interface UserRepository extends ElasticsearchRepository<User,Integer> {
12 public User findByUserName(String UserName); 13 }

    2)在Bean上標註所屬索引和所屬類型

    

 1 package cn.coreqi.entities;
 2 
 3 import org.springframework.data.elasticsearch.annotations.Document;
 4 
 5 import java.io.Serializable;
 6 
 7 @Document(indexName = "coreqi",type = "user")
 8 public class User implements Serializable {
 9     private Integer id;
10     private String userName;
11     private String passWord;
12     private Integer enabled;
13 
14     public User() {
15     }
16 
17     public User(Integer id, String userName, String passWord, Integer enabled) {
18         this.id = id;
19         this.userName = userName;
20         this.passWord = passWord;
21         this.enabled = enabled;
22     }
23 
24     public Integer getId() {
25         return id;
26     }
27 
28     public void setId(Integer id) {
29         this.id = id;
30     }
31 
32     public String getUserName() {
33         return userName;
34     }
35 
36     public void setUserName(String userName) {
37         this.userName = userName;
38     }
39 
40     public String getPassWord() {
41         return passWord;
42     }
43 
44     public void setPassWord(String passWord) {
45         this.passWord = passWord;
46     }
47 
48     public Integer getEnabled() {
49         return enabled;
50     }
51 
52     public void setEnabled(Integer enabled) {
53         this.enabled = enabled;
54     }
55 
56     @Override
57     public String toString() {
58         return "User{" +
59                 "id=" + id +
60                 ", userName=‘" + userName + ‘\‘‘ +
61                 ", passWord=‘" + passWord + ‘\‘‘ +
62                 ", enabled=" + enabled +
63                 ‘}‘;
64     }
65 }

    3)調用

    

 1     @Autowired
 2     private UserRepository userRepository;
 3 
 4     public String add() {
 5         User user = new User(1,"fanqi","123456",1);
 6         userRepository.index(user);
 7         return "seccess";
 8     }
 9 
10     public User search() throws IOException {
11         User user = userRepository.findByUserName("fanqi");
12         return user;
13     }

  2.第二種方式:使用ElasticsearchTemplate

    1)調用

  

 1     @Autowired
 2     private ElasticsearchOperations elasticsearchOperations;
 3 
 4     public String add2() {
 5         User user = new User(1,"fanqi","123456",1);
 6         IndexQuery indexQuery = new IndexQueryBuilder().withObject(user).withIndexName("coreqi").withType("user").build();
 7         elasticsearchOperations.index(indexQuery);
 8         return "seccess";
 9     }
10 
11     public User search2() throws IOException {
12 
13         CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
14                 .and(new Criteria("userName").is("fanqi")));
15         return elasticsearchOperations.queryForObject(criteriaQuery,User.class);
16 
17 //        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("userName","fanqi")).withIndices("coreqi").withTypes("user").build();
18 //        List<User> list = elasticsearchOperations.queryForList(searchQuery, User.class);
19 //        for(User s : list){
20 //            System.out.println(s.toString());
21 //        }
22     }

SpringBoot整合SpringDataElasticSearch操作ES