ElasticSearch(十一):Spring Data ElasticSearch 的使用(一)


1、環境准備

 我本地使用的環境為:

  虛擬機版本:Centos 7.3 兩台   IP 分別為:192.168.56.12, 192.168.56.13

  Elasticsearch版本:6.4.0  (已安裝IK分詞器)

  虛擬機中JDK版本:12.0.1

  宿主機系統:Windows 10

  宿主機JDK版本:1.8

  Idea版本: 2019.1.3

2、創建工程

  1)、在Idea中創建一個Maven工程,並導入Spring Data Elasticsearch依賴。

     Spring Data Elasticsearch依賴(pom.xml): 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.Aiden</groupId>
 8     <artifactId>SpringData-elasticsearch</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <dependencies>
12         <dependency>
13             <groupId>org.elasticsearch</groupId>
14             <artifactId>elasticsearch</artifactId>
15             <version>5.6.8</version>
16         </dependency>
17         <dependency>
18             <groupId>org.elasticsearch.client</groupId>
19             <artifactId>transport</artifactId>
20             <version>5.6.8</version>
21         </dependency>
22         <dependency>
23             <groupId>org.apache.logging.log4j</groupId>
24             <artifactId>log4j-to-slf4j</artifactId>
25             <version>2.9.1</version>
26         </dependency>
27         <dependency>
28             <groupId>org.slf4j</groupId>
29             <artifactId>slf4j-api</artifactId>
30             <version>1.7.24</version>
31         </dependency>
32         <dependency>
33             <groupId>org.slf4j</groupId>
34             <artifactId>slf4j-simple</artifactId>
35             <version>1.7.21</version>
36         </dependency>
37         <dependency>
38             <groupId>log4j</groupId>
39             <artifactId>log4j</artifactId>
40             <version>1.2.12</version>
41         </dependency>
42         <dependency>
43             <groupId>junit</groupId>
44             <artifactId>junit</artifactId>
45             <version>4.12</version>
46         </dependency>
47 
48 
49         <dependency>
50             <groupId>com.fasterxml.jackson.core</groupId>
51             <artifactId>jackson-core</artifactId>
52             <version>2.8.1</version>
53         </dependency>
54         <dependency>
55             <groupId>com.fasterxml.jackson.core</groupId>
56             <artifactId>jackson-databind</artifactId>
57             <version>2.8.1</version>
58         </dependency>
59         <dependency>
60             <groupId>com.fasterxml.jackson.core</groupId>
61             <artifactId>jackson-annotations</artifactId>
62             <version>2.8.1</version>
63         </dependency>
64 
65 
66         <dependency>
67             <groupId>org.springframework.data</groupId>
68             <artifactId>spring-data-elasticsearch</artifactId>
69             <version>3.0.5.RELEASE</version>
70             <exclusions>
71                 <exclusion>
72                     <groupId>org.elasticsearch.plugin</groupId>
73                     <artifactId>transport-netty4-client</artifactId>
74                 </exclusion>
75             </exclusions>
76         </dependency>
77 
78         <dependency>
79             <groupId>org.springframework</groupId>
80             <artifactId>spring-test</artifactId>
81             <version>5.0.4.RELEASE</version>
82         </dependency>
83 
84     </dependencies>
85 
86 
87 </project>

  2)、創建配置文件

  在maven工程的resource目錄下創建Spring Data Elasticsearch的配置文件  ApplicationContext.xml,並引入Elasticsearch命名空

  ApplicationContext.xml文件內容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
 6  xsi:schemaLocation="  7  http://www.springframework.org/schema/beans  8  http://www.springframework.org/schema/beans/spring-beans.xsd  9  http://www.springframework.org/schema/context 10  http://www.springframework.org/schema/context/spring-context.xsd 11  http://www.springframework.org/schema/data/elasticsearch 12  http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd 13  ">
14 
15 
16 </beans>

  3)、創建實體Film

  在maven工程中創建包com.Aiden.doamin,並在此包下創建實體類Film

 1 package com.Aiden.domain;  2 
 3 import org.springframework.data.annotation.Id;  4 import org.springframework.data.elasticsearch.annotations.Document;  5 import org.springframework.data.elasticsearch.annotations.Field;  6 import org.springframework.data.elasticsearch.annotations.FieldType;  7 
 8 public class Film {  9 
10     private Long id; 11     private String title; 12     private String content; 13     private String date; 14     private String price; 15     private String director; 16 
17     public Long getId() { 18         return id; 19  } 20 
21     public void setId(Long id) { 22         this.id = id; 23  } 24 
25     public String getTitle() { 26         return title; 27  } 28 
29     public void setTitle(String title) { 30         this.title = title; 31  } 32 
33     public String getContent() { 34         return content; 35  } 36 
37     public void setContent(String content) { 38         this.content = content; 39  } 40 
41     public String getDate() { 42         return date; 43  } 44 
45     public void setDate(String date) { 46         this.date = date; 47  } 48 
49     public String getPrice() { 50         return price; 51  } 52 
53     public void setPrice(String price) { 54         this.price = price; 55  } 56 
57     public String getDirector() { 58         return director; 59  } 60 
61     public void setDirector(String director) { 62         this.director = director; 63  } 64 
65  @Override 66     public String toString() { 67         return "Film{" +
68                 "id=" + id +
69                 ", title='" + title + '\'' +
70                 ", content='" + content + '\'' +
71                 ", date='" + date + '\'' +
72                 ", price='" + price + '\'' +
73                 ", director='" + director + '\'' +
74                 '}'; 75  } 76 }

  4)、創建Dao

  在maven工程中創建com.Aiden.dao包,並在包中創建倉庫 FilmRepository

 1 package com.Aiden.dao;  2 
 3 import com.Aiden.domain.Film;  4 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;  5 import org.springframework.stereotype.Repository;  6 
 7 @Repository  8 public interface FilmRepository extends ElasticsearchRepository<Film,Long> {  9 
10 }

  5)、創建Service

  在maven工程中創建com.Aiden.service包,並在包中創建 FilmService 接口,並在其中添加save方法

1 package com.Aiden.service; 2 
3 import com.Aiden.domain.Film; 4 
5 public interface FilmService { 6 
7     public void save(Film film); 8 
9 }

  在剛創建的service包下創建Impl包(即com.Aiden.service.Impl包),並在此包中創建FilmServiceImpl類並實現FilmService接口,實現其方法

 1 package com.Aiden.service.impl;  2 
 3 import com.Aiden.dao.FilmRepository;  4 import com.Aiden.domain.Film;  5 import com.Aiden.service.FilmService;  6 import org.springframework.beans.factory.annotation.Autowired;  7 import org.springframework.stereotype.Service;  8 
 9 @Service 10 public class FilmServiceImpl implements FilmService { 11 
12  @Autowired 13     private FilmRepository filmRepository; 14 
15     public void save(Film film) { 16  filmRepository.save(film); 17  } 18 
19 }

  6)、修改Spring Data Elasticsearch配置文件ApplicationContext.xml,完成項目配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
 6  xsi:schemaLocation="  7  http://www.springframework.org/schema/beans  8  http://www.springframework.org/schema/beans/spring-beans.xsd  9  http://www.springframework.org/schema/context 10  http://www.springframework.org/schema/context/spring-context.xsd 11  http://www.springframework.org/schema/data/elasticsearch 12  http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd 13  ">
14 
15     <!-- 掃描Dao包,自動創建實例 -->
16     <elasticsearch:repositories base-package="com.Aiden.dao"/>
17 
18     <!-- 掃描Service包,創建Service的實體 -->
19     <context:component-scan base-package="com.Aiden.service"/>
20     
21     <!-- 配置elasticSearch的連接 -->
22     <elasticsearch:transport-client id="client" cluster-nodes="192.168.56.12:9300,192.168.56.13:9300" cluster-name="my-application"/>
23 
24 
25     <!-- ElasticSearch模版對象 -->
26     <bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
27         <constructor-arg name="client" ref="client"/>
28     </bean>
29 
30 </beans>

  7)、配置實體類

  基於spring data elasticsearch注解配置索引、映射和實體的關系

 1 package com.Aiden.domain;  2 
 3 import org.springframework.data.annotation.Id;  4 import org.springframework.data.elasticsearch.annotations.Document;  5 import org.springframework.data.elasticsearch.annotations.Field;  6 import org.springframework.data.elasticsearch.annotations.FieldType;  7 
 8 @Document(indexName = "film",type = "action")  9 public class Film { 10  @Id 11     private Long id; 12     @Field(index = true,analyzer = "ik_max_word",store = true,searchAnalyzer = "ik_max_word",type = FieldType.text) 13     private String title; 14     @Field(index = true,analyzer = "ik_max_word",store = true,searchAnalyzer = "ik_max_word",type = FieldType.text) 15     private String content; 16     @Field(index = true,analyzer = "ik_max_word",store = true,searchAnalyzer = "ik_max_word",type = FieldType.text) 17     private String date; 18     @Field(index = true,analyzer = "ik_max_word",store = true,searchAnalyzer = "ik_max_word",type = FieldType.text) 19     private String price; 20     @Field(index = true,analyzer = "ik_max_word",store = true,searchAnalyzer = "ik_max_word",type = FieldType.text) 21     private String director; 22 
23     public Long getId() { 24         return id; 25  } 26 
27     public void setId(Long id) { 28         this.id = id; 29  } 30 
31     public String getTitle() { 32         return title; 33  } 34 
35     public void setTitle(String title) { 36         this.title = title; 37  } 38 
39     public String getContent() { 40         return content; 41  } 42 
43     public void setContent(String content) { 44         this.content = content; 45  } 46 
47     public String getDate() { 48         return date; 49  } 50 
51     public void setDate(String date) { 52         this.date = date; 53  } 54 
55     public String getPrice() { 56         return price; 57  } 58 
59     public void setPrice(String price) { 60         this.price = price; 61  } 62 
63     public String getDirector() { 64         return director; 65  } 66 
67     public void setDirector(String director) { 68         this.director = director; 69  } 70 
71  @Override 72     public String toString() { 73         return "Film{" +
74                 "id=" + id +
75                 ", title='" + title + '\'' +
76                 ", content='" + content + '\'' +
77                 ", date='" + date + '\'' +
78                 ", price='" + price + '\'' +
79                 ", director='" + director + '\'' +
80                 '}'; 81  } 82 }

  8)、創建測試類

  在maven工程的test文件夾下創建測試類 SpringDataElasticSearchTest,並添加測試方法

 1 package com.Aiden.Test;  2 
 3 import com.Aiden.domain.Film;  4 import com.Aiden.service.FilmService;  5 import org.junit.Test;  6 import org.junit.runner.RunWith;  7 import org.springframework.beans.factory.annotation.Autowired;  8 import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;  9 import org.springframework.test.context.ContextConfiguration; 10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 11 
12 import java.util.List; 13 
14 
15 @RunWith(SpringJUnit4ClassRunner.class) 16 @ContextConfiguration(locations = "classpath:ApplicationContext.xml") 17 public class SpringDataElasticSearchTest { 18 
19  @Autowired 20     private FilmService filmService; 21 
22  @Autowired 23     private ElasticsearchTemplate elasticsearchTemplate; 24 
25  @Test 26     public void createIndex() throws Exception { 27         elasticsearchTemplate.createIndex(Film.class); 28         elasticsearchTemplate.putMapping(Film.class); 29  } 30 
31  @Test 32     public void saveFilm1() { 33         Film film = new Film(); 34         film.setTitle("蜘蛛俠:英雄遠征 Spider-Man: Far from Home"); 35         film.setContent("在復仇者聯盟眾英雄的努力下,於滅霸無限手套事件中化作為灰燼的人們,重新回到了人世間,曾經消失的蜘蛛俠 彼得帕克 也回歸到了普通的生活之中,數月后,蜘蛛俠彼得帕克所在的學校舉行了歐洲旅游,帕克也在其中, 在歐州威尼斯旅行時,一個巨大無比的水怪襲擊了威尼斯,不敵敵人的蜘蛛俠幸得一位自稱神秘客的男子搭救才擊退敵人,之后 神盾局局長找上正在旅游的彼得帕克並要求其加入神盾局,並安排神秘客協助帕克,神秘客自稱來自其他宇宙,並告知一群名為元素眾的邪惡勢力已經入侵這個宇宙了,為了守護來之不易的和平,蜘蛛俠決定與神秘客聯手,然而在神秘客那頭罩之中,似乎隱藏着什么不為人知的真相……"); 36         film.setDate("2019-06-28"); 37         film.setDirector("喬·沃茨"); 38         film.setPrice("78"); 39         film.setId(1L); 40  filmService.save(film); 41  } 42 
43 }

  9)、運行測試

  執行SpringDataElasticSearchTest中的測試方法 createIndex 、saveFilm1,創建索引及加入文檔。

  測試方法執行完畢,在head插件中查看Elasticsearch集群中索引情況:

  索引創建成功:

 

 

查看索引信息中的mapping信息,創建正常:

 

 

執行saveFilm1加入文檔,文檔加入成功:

 

 

至此Spring Data Elasticsearch工程創建成功!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM