您现在的位置是:首页 > 文章详情

Spring Boot系列(十)Spring Boot整合Elasticsearch全文搜索引擎

日期:2018-04-24点击:585

这一篇介绍Spring Boot整合Elasticsearch全文搜索引擎,需要springboot实战完整视频教程的,点击这里!

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文件):

org.springframework.boot

spring-boot-starter-data-elasticsearch

可以像其他Spring beans那样注入一个自动配置的ElasticsearchTemplate或Elasticsearch客户端实例。默认情况下,该实例将尝试连接到一个本地内存服务器(在Elasticsearch项目中的一个NodeClient),但可以通过设置spring.data.elasticsearch.clusterNodes为一个以逗号分割的host:port列表来将其切换到一个远程服务器(比如,TransportClient)。

@Component

publicclass MyBean {

privateElasticsearchTemplatetemplate;

@Autowired

public MyBean(ElasticsearchTemplate template) {

this.template=template;

}

// ...

}

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

应用集成ElasticSearch案例

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

elasticsearch.host=localhost

elasticsearch.port=9300

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

@Configuration@PropertySource(value ="classpath:elasticsearch.properties")

@EnableElasticsearchRepositories(basePackages ="co.paan.repository")

publicclass ElasticsearchConfiguration {

@Resource

privateEnvironment environment;

@Bean

public Client client() {

TransportClient client =newTransportClient();

TransportAddress address =newInetSocketTransportAddress(environment.getProperty("elasticsearch.host"), Integer.parseInt(environment.getProperty("elasticsearch.port")));

client.addTransportAddress(address);

returnclient;

}

@BeanpublicElasticsearchOperations elasticsearchTemplate() {

returnnewElasticsearchTemplate(client());

}

}

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

@Document(indexName ="post",type="post", shards =1, replicas =0)

publicclassPost {

@Id

privateStringid;

privateStringtitle;

@Field(type= FieldType.Nested)

privateList tags;

publicStringgetId() {

returnid;

}

publicvoidsetId(Stringid) {

this.id = id;

}

publicStringgetTitle() {

returntitle;

}

publicvoidsetTitle(Stringtitle) {

this.title = title;

}

publicList getTags() {

returntags;

}

publicvoidsetTags(List tags) {

this.tags = tags;

}

}

publicclassTag {

privateStringid;

privateStringname;

publicStringgetId() {

returnid;

}

publicvoidsetId(Stringid) {

this.id = id;

}

publicStringgetName() {

returnname;

}

publicvoidsetName(Stringname) {

this.name = name;

}

}

数据源继承ElasticsearchRepository类,封装接口代码如下:

publicinterface PostRepository extends ElasticsearchRepository{

Page findByTagsName(String name, Pageable pageable);

}

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

publicinterface PostService {

Post save(Post post);

Post findOne(String id);

Iterable findAll();

Page findByTagsName(String tagName, PageRequest pageRequest);

}

@Servicepublicclass PostServiceImpl implements PostService{

@Autowired

privatePostRepository postRepository;

@Override

public Post save(Post post) {

postRepository.save(post);

returnpost;

}

@OverridepublicPost findOne(String id) {

returnpostRepository.findOne(id);

}

@OverridepublicIterable findAll() {

returnpostRepository.findAll();

}

@OverridepublicPage findByTagsName(String tagName, PageRequest pageRequest) {

returnpostRepository.findByTagsName(tagName, pageRequest);

}

}


工作一到五年的程序员朋友面对目前的技术无从下手,感到很迷茫可以加群744677563,里面有阿里Java高级大牛直播讲解知识点,分享知识,课程内容都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

原文链接:https://yq.aliyun.com/articles/681590
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章