文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring Boot整合Elasticsearch如何实现全文搜索引擎

2023-05-30 22:48

关注

这篇文章给大家分享的是有关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文件):

<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)。

@Componentpublic class MyBean { private ElasticsearchTemplate template;  @Autowired public MyBean(ElasticsearchTemplate template) { this.template = template; } // ...}

如果添加一个自己的ElasticsearchTemplate类型的@Bean,它将替换默认的。

应用集成ElasticSearch案例

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

elasticsearch.host=localhostelasticsearch.port=9300

ElasticSearch配置,读取elasticsearch.properties配置文件信息,具体代码如下:

@Configuration@PropertySource(value = "classpath:elasticsearch.properties")@EnableElasticsearchRepositories(basePackages = "co.paan.repository")public class ElasticsearchConfiguration { @Resourceprivate Environment environment;@Beanpublic 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()); }}

两个实体类,具体代码如下:

@Document(indexName = "post", type = "post", shards = 1, replicas = 0)public class Post {@Idprivate 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类,封装接口代码如下:

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

数据服务接口及实现类,代码如下:

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{ @Autowiredprivate PostRepository postRepository;@Overridepublic 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); }}

测试代码如下:

@Testpublic 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如何实现全文搜索引擎”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯