Spring Data Elasticsearch加Elasticsearch服务实现全文搜索
2017-06-02 17:27
871 查看
本文首发于我的博客:https://blog.wellcoding.win
Elasticsearch是一个开源的基于Lucene的搜索服务器,Elasticsearch是使用Java语言开发的,它提供了分布式多用户全文搜索引擎,提供基于RESTful 的API接口。Elasticsearch还提供了一个Java的Client,以及相应的API。
Spring Data中提供了相应的模块
首先添加Maven依赖:
创建一个基础接口:
在
然后创建VO以及对应的Repository接口,接口实现不需要写,会生成默认实现:
VO类必须实现
在Service中就可以注入ArticleRepository对象,进行数据写入Elasticsearch、删除、搜索等操作了。
Elasticsearch是一个开源的基于Lucene的搜索服务器,Elasticsearch是使用Java语言开发的,它提供了分布式多用户全文搜索引擎,提供基于RESTful 的API接口。Elasticsearch还提供了一个Java的Client,以及相应的API。
Spring Data中提供了相应的模块
Spring Data Elasticsearch,
Spring Data Elasticsearch模块就是基于这个Client实现的。不过不知道出于什么原因,最新版的
Spring Data Elasticsearch 2.1.3.RELEASE也仅仅支持到
Elasticsearch 2.4版本。本文将使用
Spring Data Elasticsearch 2.1.3.RELEASE。
首先添加Maven依赖:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>2.1.3.RELEASE</version> </dependency>
创建一个基础接口:
package win.wellcoding.elasticsearch; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.data.repository.PagingAndSortingRepository; import java.io.Serializable; public interface BaseSearchRepository<E, ID extends Serializable> extends ElasticsearchRepository<E, ID>, PagingAndSortingRepository<E, ID> { }
在
spring-context.xml中添加如下配置:
<elasticsearch:transport-client id="client" cluster-name="elasticsearch" cluster-nodes="127.0.0.1:9300" client-transport-sniff="false"/> <elasticsearch:repositories base-package="win.wellcoding.elasticsearch.repository" elasticsearch-template-ref="elasticsearchTemplate"/> <bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"> <constructor-arg name="client" ref="client"/> </bean>
cluster-name是Elasticsearch集群名称;
cluster-nodes是集群节点,使用的端口是9300而不是RESTful API使用的9200,用英文逗号分割;
base-package是扫描包路径,会扫描这个包下的所有类。注意基础接口类不能在
base-package下。
然后创建VO以及对应的Repository接口,接口实现不需要写,会生成默认实现:
package win.wellcoding.elasticsearch.vo; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; import java.io.Serializable; @Document(indexName = "article-index", type = "article", shards = 1, replicas = 0) public class ArticleVo implements Serializable { @Id public Long id; @Field(type = FieldType.String, searchAnalyzer = "ik_max_word", analyzer = "ik_max_word") public String title; @Field(type = FieldType.String, searchAnalyzer = "ik", analyzer = "ik") public String content; // **** Getter and Setter **** }
VO类必须实现
Serializable接口,使用
@Document注解指定index以及type,Spring Data会在项目启动时检查对应的index和type是否存在,不存在则会创建;使用
@Id指定主键字段;为要添加到Elasticsearch中的字段添加
@Field注解,指定字段类型以及解析器。
package win.wellcoding.elasticsearch.repository; import win.wellcoding.elasticsearch.vo.ArticleVo; import win.wellcoding.elasticsearch.BaseSearchRepository; import java.util.List; public interface ArticleRepository extends BaseSearchRepository<ArticleVo, Long> { }
在Service中就可以注入ArticleRepository对象,进行数据写入Elasticsearch、删除、搜索等操作了。
相关文章推荐
- Spring Data Elasticsearch 与 Elasticsearch 的关系
- Elasticsearch学习(6)—— Spring Data Elasticsearch
- ElasticSearch索引的相关操作---javaEE--SpringDataElasticSearch
- SpringBoot项目通过 spring data elasticsearch使用elasticsearch
- Spring Data Elasticsearch 与 Elasticsearch 的关系
- Spring Data ElasticSearch parnt/child search
- Zend Search Lucene实现全文搜索
- Spring Data ElasticSearch
- Spring Data ElasticSearch环境搭建
- ElasticsearchCRUD使用(十四)【ElasticsearchCRUD搜索查询和过滤】
- spring data elasticsearch
- Spring Data Elasticsearch
- spring data elasticsearch的一个复杂查询条件
- Spring Data Elasticsearch翻译
- plainelastic.net elasticsearch实现搜索业务
- spring data elasticsearch
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索
- 使用ElasticSearch6.0快速实现全文搜索功能的示例代码
- Zend Search Lucene实现全文搜索
- How to provide highlighting with Spring data elasticsearch