07 Spring Data ElasticSearch使用

1 Spring Data ElasticSearch简介

1.1 什么是Spring Data

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快 捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现 的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。

Spring Data的官网:http://projects.spring.io/spring-data/

Spring Data常用的功能模块如下:

在这里插入图片描述

1.2 什么是Spring Data ElasticSearch

Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API 进行封装 。Spring Data为Elasticsearch项目提供集成搜索引擎。Spring Data Elasticsearch POJO的关键功能区域 为中心的模型与Elastichsearch交互文档和轻松地编写一个存储库数据访问层。

官方网站:http://projects.spring.io/spring-data-elasticsearch/

2 Spring Data ElasticSearch入门

1)导入Spring Data ElasticSearch坐标

 <dependency>           
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring‐data‐elasticsearch</artifactId> 
     <version>3.0.5.RELEASE</version>       
     <exclusions>               
         <exclusion> 
             <groupId>org.elasticsearch.plugin</groupId> 
             <artifactId>transport‐netty4‐client</artifactId> 
         </exclusion>        
     </exclusions>        
</dependency> 

2)创建applicationContext.xml配置文件,引入elasticsearch命名空间

<?xml version="1.0" encoding="UTF‐8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"      xmlns:context="http://www.springframework.org/schema/context"      xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"      xsi:schemaLocation="      http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring‐beans.xsd          http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring‐context.xsd
http://www.springframework.org.schema/data.elasticsearch
   http://www.springframework.org.schema/data.elasticsearch/spring-elasticsearch-1.0.xsh
    </beans>

3)编写实体Article

public class Article {     
    private Integer id;    
    private String title;    
    private String content;    
    public Integer getId() {         return id;     }     public void setId(Integer id) {         this.id = id;     }     public String getTitle() {         return title;     }     public void setTitle(String title) {       
        this.title = title;   
    }    
    public String getContent() {         return content;     }     public void setContent(String content) { 
        this.content = content;    
    }     
    @Override   
    public String toString() {         return "Article [id=" + id + ", title=" + title + ", content=" + content + "]";                        
  }  
}

4)编写Dao

@Repository public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {  
}

5)编写Service

public interface ArticleService {       public void save(Article article);      
}
@Service public class ArticleServiceImpl implements ArticleService {       @Autowired     
    private ArticleRepository articleRepository;  
    public void save(Article article) { 
        articleRepository.save(article);   
    }  
} 

6) 配置applicationContext.xml

<?xml version="1.0" encoding="UTF‐8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"        xmlns:context="http://www.springframework.org/schema/context"        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"        xsi:schemaLocation=" http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring‐beans.xsd          http://www.springframework.org/schema/context          http://www.springframework.org/schema/context/spring‐context.xsd          http://www.springframework.org/schema/data/elasticsearch          http://www.springframework.org/schema/data/elasticsearch/spring‐elasticsearch‐1.0.xsd          ">               
    <!‐‐ 扫描Dao包,自动创建实例 ‐‐>     <elasticsearch:repositories base‐package="com.itheima.dao"/> 
     <!‐‐ 扫描Service包,创建Service的实体 ‐‐>    
    <context:component‐scan base‐package="com.itheima.service"/>       <!‐‐ 配置elasticSearch的连接 ‐‐>       
    <!‐‐ 配置elasticSearch的连接 ‐‐>   
    <elasticsearch:transport‐client id="client" cluster‐nodes="localhost:9300" cluster‐name="myelasticsearch"/>         
    <!‐‐ ElasticSearch模版对象 ‐‐> 
    <bean id="elasticsearchTemplate"  class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">        
        <constructor‐arg name="client" ref="client"></constructor‐arg>    
    </bean>   
</beans>

7)配置实体

基于spring data elasticsearch注解配置索引、映射和实体的关系

//@Document 文档对象 (索引信息、文档类型 ) 
@Document(indexName="blog3",type="article") 
public class Article {     
    //@Id 文档主键 唯一标识     
    @Id     
    //@Field 每个文档的字段配置(类型、是否分词、是否存储、分词器 ) 
    @Field(store=true, index = false,type = FieldType.Integer)     private Integer id;     @Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type =  FieldType.text)   
    private String title;     @Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type =  FieldType.text)    
    private String content;     
    public Integer getId() {         return id;     } 
    public void setId(Integer id) {         this.id = id;     } 
    public String getTitle() {         return title;     }
    public void setTitle(String title) {
          this.title = title;    
    }    
    public String getContent() {       
        return content;    
    }    
    public void setContent(String content) {         this.content = content;     }    
    @Override     
    public String toString() {         return "Article [id=" + id + ", title=" + title + ", content=" + content + "]";    
                             } 
}
其中,注解解释如下: 
@Document(indexName="blob3",type="article"):   
	indexName:索引的名称(必填项)    
	type:索引的类型 @Id:主键的唯一标识 
@Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type =  FieldType.text)    
	index:是否设置分词     
	analyzer:存储时使用的分词器    
	searchAnalyze:搜索时使用的分词器  
	store:是否存储     
	type: 数据类型

8)创建测试类SpringDataESTest

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:applicationContext.xml") 
public class SpringDataESTest {       
    @Autowired    
    private ArticleService articleService;     
    @Autowired     
    private TransportClient client;
    
 @Autowired   
    private ElasticsearchTemplate elasticsearchTemplate;    
    /**创建索引和映射*/    
    @Test    
    public void createIndex(){ 
        elasticsearchTemplate.createIndex(Article.class); 
        elasticsearchTemplate.putMapping(Article.class);   
    }     
    /**测试保存文档*/    
    @Test    
    public void saveArticle(){ 
        Article article = new Article();    
        article.setId(100);        
        article.setTitle("测试SpringData ElasticSearch"); 
        article.setContent("Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操 作,将原始操作elasticSearch的客户端API 进行封装 \n" +                 "    Spring Data为Elasticsearch Elasticsearch项目提供集成搜索引擎");         articleService.save(article);     
    }   
}

h操 作,将原始操作elasticSearch的客户端API 进行封装 \n" + " Spring Data为Elasticsearch Elasticsearch项目提供集成搜索引擎"); articleService.save(article);
}
}


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐