gpt4 book ai didi

Spring Boot整合Elasticsearch实现全文搜索引擎案例解析

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Spring Boot整合Elasticsearch实现全文搜索引擎案例解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎。Elastic Search是一个开源的,分布式,实时搜索和分析引擎。Spring Boot为Elasticsearch及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 。

最后此篇关于Spring Boot整合Elasticsearch实现全文搜索引擎案例解析的文章就讲到这里了,如果你想了解更多关于Spring Boot整合Elasticsearch实现全文搜索引擎案例解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com