这一篇介绍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高级大牛直播讲解知识点,分享知识,课程内容都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!