Spring Data Elasticsearch加Elasticsearch服务实现全文搜索
来源:互联网 发布:免费网络卫星电视直播 编辑:程序博客网 时间:2024/04/19 06:10
本文首发于我的博客:https://blog.wellcoding.win
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
- [Elasticsearch] 全文搜索
- [Elasticsearch] 全文搜索
- 全文搜索之 Elasticsearch
- [Elasticsearch] 全文搜索 (三)
- elasticsearch全文搜索
- Spring Data 整合 ElasticSearch搜索服务器
- Spring Data Elasticsearch
- spring-data-elasticsearch api
- Spring Data ElasticSearch
- 深入浅出 spring-data-elasticsearch
- spring data elasticsearch
- Spring Data Elasticsearch翻译
- Spring Data Elasticsearch
- Spring Data Elasticsearch
- elasticsearch的实现全文检索
- elasticsearch的实现全文检索
- OpenGL的替代者——Vulkan
- UFPS入门: Unity FPS 教程
- 1001. A+B Format (20)
- xv6 CPU alarm
- UE4蓝图进阶学习2017.6笔记
- Spring Data Elasticsearch加Elasticsearch服务实现全文搜索
- oracle 存储过程学习
- 让路由器暴露一个内网IP,供外网访问
- 2、jQuery选择器与方法(Head First笔记)
- 如何使用Kotlin进行Android开发
- linux下使用脚本自动化远程备份MySQL数据库
- 论文中著名会议和期刊的一些介绍(持续更新中)
- 从技术细节看美团架构
- 数据结构动态申请二维数组