Spring Data ElasticSearch入门案例
创建maven工程elasticsearch_springdata
基于maven导入坐标
导入spring data elasticsearch,它是对elasticsearch API的简化封装。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
导入spring test和junit,编写测试用力需要进行测试。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
导入slf4j-log4j日志包。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
创建applicationContext.xml和log4j.properties配置文件,在applicationContext.xml配置文件中引入spring data elasticsearch名称空间。
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="
http://www.springframework.org/schema/data/elasticsearch
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd"
log4j配置文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
创建domain,dao,service包
编写dao,继承ElasticSearchRepository接口
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> { }
配置applicationContext.xml,扫描dao包自动创建dao的实现。
<!-- 扫描dao包 自动创建实现 -->
<elasticsearch:repositories base-package="cn.niwotaxuexiba.dao" />
编写service
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleRepository articleRepository;
public void save(Article article){
articleRepository.save(article);
}
}
配置applicationContext.xml,扫描service包
<!-- 扫描service包 -->
<context:component-scan base-package="cn.niwotaxuexiba.service" />
配置applicationContext.xml连接elasticsearch.
<!-- 配置elasticsearch连接 -->
<elasticsearch:transport-client id="client" cluster-nodes="localhost:9300"/>
<!-- spring data elasticsearch DAO必须依赖elasticsearchTemplate -->
<bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client" />
</bean>
在使用spring data elasticsearch创建索引和映射时,需要将索引和映射信息配置在实体类上面。
@Document文档对象(索引信息、文档类型)
@Id文档主键,是唯一标识
@Field每个文档的字段配置(类型、是否分词、是否存储、分词器)
@Document(indexName = "blog3",type="article")
public class Article {
@Id
@Field(index=Fieldindex.not_analyzed,store=true,type=FieldType.Integer)
private Integer id;
@Field(index=Fieldindex.analyzed,analyzer="ik",store=true,searchAnalyzer="ik",type=FieldType.String)
private String title;
@Field(index=Fieldindex.analyzed,analyzer="ik",store=true,searchAnalyzer="ik",type=FieldType.String)
private String content;
}
通过ElasticsearchTemplate创建索引和添加映射
@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class ArticleServiceImpltest {
@Autowired
private ArticleService articleService;
@Autowired
private Client client;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Test
public void createIndex() {
elasticsearchTemplate.createIndex(Article.class);
elasticsearchTemplate.putMapping(Article.class);
}
}
spring data search CRUD操作:
CrudRepository提供增删改查save/delete/findAll/findOne的方法;
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleRepository articleRepository;
@Override
public void save(Article article){
articleRepository.save(article);
}
@Override
public void delete(Article article) {
// Todo Auto-generated method stub
articleRepository.delete(article);
}
@Override
public Article findOne(Integer id) {
// Todo Auto-generated method stub
return articleRepository.findOne(id);
}
@Override
public Iterable<Article> findAll() {
// Todo Auto-generated method stub
return articleRepository.findAll();
}
}
service
@Override
public List<Article> findByTitle(String title) {
// Todo Auto-generated method stub
return articleRepository.findByTitle(title);
}
dao
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {
List<Article> findByTitle(String title);
}
service
public Page<Article> findByTitle(String title, Pageable pageable) {
// Todo Auto-generated method stub
return articleRepository.findByTitle(title,pageable);
}
dao
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {
Page<Article> findByTitle(String title, Pageable pageable);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。