javascript
Spring Data ElasticSearch入门案例
Spring Data ElasticSearch入門案例
創(chuàng)建maven工程elasticsearch_springdata
基于maven導(dǎo)入坐標(biāo)
導(dǎo)入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>導(dǎo)入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>導(dǎo)入slf4j-log4j日志包。
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version> </dependency>創(chuàng)建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/elasticsearchhttp://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創(chuàng)建domain,dao,service包
編寫dao,繼承ElasticSearchRepository接口
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> { }配置applicationContext.xml,掃描dao包自動創(chuàng)建dao的實現(xiàn)。
<!-- 掃描dao包 自動創(chuàng)建實現(xiàn) --> <elasticsearch:repositories base-package="cn.niwotaxuexiba.dao" />編寫service
@Service public class ArticleServiceImpl implements ArticleService {@Autowiredprivate 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創(chuàng)建索引和映射時,需要將索引和映射信息配置在實體類上面。
@Document文檔對象(索引信息、文檔類型)
@Id文檔主鍵,是唯一標(biāo)識
@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創(chuàng)建索引和添加映射
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:applicationContext.xml") public class ArticleServiceImplTest {@Autowiredprivate ArticleService articleService;@Autowiredprivate Client client;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@Testpublic void createIndex() {elasticsearchTemplate.createIndex(Article.class);elasticsearchTemplate.putMapping(Article.class);} }spring data search CRUD操作:
CrudRepository提供增刪改查save/delete/findAll/findOne的方法;
PagingAndSortingRepository提供分頁和排序的方法。
@Service public class ArticleServiceImpl implements ArticleService {@Autowiredprivate ArticleRepository articleRepository;@Overridepublic void save(Article article){articleRepository.save(article);}@Overridepublic void delete(Article article) {// TODO Auto-generated method stubarticleRepository.delete(article);}@Overridepublic Article findOne(Integer id) {// TODO Auto-generated method stubreturn articleRepository.findOne(id);}@Overridepublic Iterable<Article> findAll() {// TODO Auto-generated method stubreturn articleRepository.findAll();} }查詢標(biāo)題的方法
service
@Override public List<Article> findByTitle(String title) {// TODO Auto-generated method stubreturn articleRepository.findByTitle(title); }dao
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {List<Article> findByTitle(String title); }分頁條件查詢,需要在查詢方法中,傳入Pageable對象。
service
public Page<Article> findByTitle(String title, Pageable pageable) {// TODO Auto-generated method stubreturn articleRepository.findByTitle(title,pageable); }dao
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {Page<Article> findByTitle(String title, Pageable pageable);}總結(jié)
以上是生活随笔為你收集整理的Spring Data ElasticSearch入门案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache Shiro实现用户登录功能
- 下一篇: 【面试题】Ajax的原理和优缺点总结