一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot整合Elasticsearch實現全文搜索引擎案例解析

Spring Boot整合Elasticsearch實現全文搜索引擎案例解析

2021-01-29 11:50tuicool Java教程

ElasticSearch作為基于Lucene的搜索服務器,既可以作為一個獨立的服務部署,也可以簽入Web應用中。SpringBoot作為Spring家族的全新框架,使得使用SpringBoot開發Spring應用變得非常簡單,在本案例中我們給大家介紹Spring Boot整合Elasticsearch實

簡單說,ElasticSearch(簡稱 ES)是搜索引擎,是結構化數據的分布式搜索引擎。Elastic Search是一個開源的,分布式,實時搜索和分析引擎。Spring BootElasticsearch及Spring Data Elasticsearch提供的基于它的抽象提供了基本的配置。Spring Boot提供了一個用于聚集依賴的spring-boot-starter-data-elasticsearch 'StarterPOM'。

引入spring-boot-starter-data-elasticsearch依賴,在pom.xml配置文件中增加如下內容(基于之前章節“Spring Boot 構建框架”中的pom.xml文件):

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

可以像其他Spring beans那樣注入一個自動配置的ElasticsearchTemplate或Elasticsearch客戶端實例。默認情況下,該實例將嘗試連接到一個本地內存服務器(在Elasticsearch項目中的一個NodeClient),但可以通過設置spring.data.elasticsearch.clusterNodes為一個以逗號分割的host:port列表來將其切換到一個遠程服務器(比如,TransportClient)。

?
1
2
3
4
5
6
7
8
9
10
@Component
public class MyBean {
 private ElasticsearchTemplate template;
 
 @Autowired
 public MyBean(ElasticsearchTemplate template) {
 this.template = template;
 }
 // ...
}

如果添加一個自己的ElasticsearchTemplate類型的@Bean,它將替換默認的。

應用集成ElasticSearch案例

新建elasticsearch.properties配置文件,添加如下配置內容:

?
1
2
elasticsearch.host=localhost
elasticsearch.port=9300

ElasticSearch配置,讀取elasticsearch.properties配置文件信息,具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration@PropertySource(value = "classpath:elasticsearch.properties")
@EnableElasticsearchRepositories(basePackages = "co.paan.repository")
public class ElasticsearchConfiguration {
 @Resource
private Environment environment;
@Bean
public Client client() {
TransportClient client = new TransportClient();
TransportAddress address = new InetSocketTransportAddress(environment.getProperty("elasticsearch.host"), Integer.parseInt(environment.getProperty("elasticsearch.port")));
client.addTransportAddress(address);
return client;
}
 @Beanpublic ElasticsearchOperations elasticsearchTemplate() {
 return new ElasticsearchTemplate(client());
 }
}

兩個實體類,具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@Document(indexName = "post", type = "post", shards = 1, replicas = 0)
public class Post {
@Id
private String id;
 private String title;
@Field(type= FieldType.Nested)
private List<Tag> tags;
 public String getId() {
return id;
}
 public void setId(String id) {
 this.id = id;
}
 public String getTitle() {
 return title;
}
 public void setTitle(String title) {
 this.title = title;
}
 public List<Tag> getTags() {
 return tags;
}
 public void setTags(List<Tag> tags) {
 this.tags = tags;
}
}
public class Tag {
private String id;
private String name;
public String getId() {
 return id;
 }
 public void setId(String id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
}

數據源繼承ElasticsearchRepository類,封裝接口代碼如下:

?
1
2
3
public interface PostRepository extends ElasticsearchRepository<Post, String>{
 Page<Post> findByTagsName(String name, Pageable pageable);
}

數據服務接口及實現類,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public interface PostService {
 Post save(Post post);
 Post findOne(String id);
 Iterable<Post> findAll();
 Page<Post> findByTagsName(String tagName, PageRequest pageRequest);
}
@Servicepublic class PostServiceImpl implements PostService{
 @Autowired
private PostRepository postRepository;
@Override
public Post save(Post post) {
 postRepository.save(post);
 return post;
 }
 @Overridepublic Post findOne(String id) {
 return postRepository.findOne(id);
 }
 @Overridepublic Iterable<Post> findAll() {
 return postRepository.findAll();
 }
 @Overridepublic Page<Post> findByTagsName(String tagName, PageRequest pageRequest) {
 return postRepository.findByTagsName(tagName, pageRequest);
 }
}

測試代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Test
public void testFindByTagsName() throws Exception {
 Tag tag = new Tag();
 tag.setId("1");
 tag.setName("tech");
 Tag tag2 = new Tag();
 tag2.setId("2");
 tag2.setName("elasticsearch");
 Post post = new Post();
 post.setId("1");
 post.setTitle("Bigining with spring boot application and elasticsearch");
 post.setTags(Arrays.asList(tag, tag2));
 postService.save(post);
 Post post2 = new Post();
 post2.setId("1");
 post2.setTitle("Bigining with spring boot application");
 post2.setTags(Arrays.asList(tag));
 postService.save(post);
 Page<Post> posts = postService.findByTagsName("tech", new PageRequest(0,10));
 Page<Post> posts2 = postService.findByTagsName("tech", new PageRequest(0,10));
 Page<Post> posts3 = postService.findByTagsName("maz", new PageRequest(0,10));
 assertThat(posts.getTotalElements(), is(1L));
 assertThat(posts2.getTotalElements(), is(1L));
 assertThat(posts3.getTotalElements(), is(0L));
}

總結

以上所述是小編給大家介紹的Spring Boot整合Elasticsearch實現全文搜索引擎案例解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.tuicool.com/articles/vqMVzqN

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人亚洲精品91专区高清 | 极品美女aⅴ高清在线观看 极品ts赵恩静和直男激战啪啪 | 9l桃色 | 韩国男女做性全过程视频 | 男人天堂a | 亚洲成人福利网站 | 欧美日韩看看2015永久免费 | gay勾搭直男com| 每天都要睡男人(nph) | 激情文学综合网 | 丁香五香天堂网 | 午夜爱爱爱爱爽爽爽视频网站 | 精品国产自在现线拍400部 | haodiaocao几万部精彩视频 | 免费国产之a视频 | 国产精品探花一区在线观看 | 国产精品青青青高清在线密亚 | 亚洲国产成人在线视频 | 好大好长好紧爽免费 | 国产精品日韩欧美一区二区三区 | 亚洲男人的天堂视频 | 高清一级做a爱免费视 | 国自产精品手机在线视频 | 国产在线乱子伦一区二区 | 韩国靠逼| 亚洲首页国产精品丝袜 | 国产欧美另类久久精品91 | 日韩精品视频福利资源站 | chinese男性厕所撒尿合集 | 波多野结衣52部合集在线观看 | 性柔术18性13处交 | japanesepooping脱粪 | 全黄毛片| 湖南美女被黑人4p到惨叫 | 亚洲日本va午夜中文字幕 | 亚洲精品第二页 | 国模孕妇季玥全部人体写真 | 91青青国产在线观看免费 | 美女视频一区二区三区在线 | 青青视频国产依人在线 | 精品91自产拍在线观看99re |