Springboot集成elasticsearch7
Springboot集成elasticsearch7
·
之前开发用的elasticsearch 6,由于媳妇公司最近要使用elasticsearch7,所以写了一个demo。
发现elasticsearch6和7还是有一些区别的。
言归正传。本次使用的es版本是7.13.1版本,安装了ik分词器插件,这里省略了安装过程,如果就是想跑demo直接下载windows版本的,干净又卫生。
先看一下springboot支持的版本。这里随便选了2.5.9版本的springboot
引入相关jar包,既然有springboot-starter肯定用他的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
按照之前开发6的经验直接配置文件添加
卧槽。竟然过时了。不慌,还好是springboot自己的东西。没办法,翻一翻自动装配类找找感觉。
看到propereties了。看来离胜利不远了再往下看
卧槽。这不都帮我做完了吗。不愧是springboot。懒人最爱。那就配置上直接用。开始写demo
#Elasticsearch 配置
spring.elasticsearch.rest.uris=http://127.0.0.1:9200
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=tongyu1956125
创建实体类,这里和mybatis-plus用一个实体类,@Document标签不懂的百度吧。这里面和6还是有差别的。es6以前支持多个type,es6只支持1个type,es7已经移除type了。
@Data
@Document(indexName = "rm_policy_publication",replicas = 1,shards = 5)
public class RmPolicyPublication extends Model<RmPolicyPublication> {
private static final long serialVersionUID = 1L;
/**
* id
*/
@Field(type = FieldType.Keyword)
@TableId(type = IdType.ID_WORKER_STR)
private String id;
/**
* 标题
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String title;
/**
* 流水号
*/
@Field(type = FieldType.Keyword) // 这个不分词 可以用于关键字查询 具体哪个需要分词 哪个不分词 你要自己确定
private String serialNumber;
/**
* 发文字号
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String policyNumber;
/**
* 效力级别(0:中央级,1:国务院级,2:部委级,3:部委司局和直属事业单位级,4:省(直辖市、计划单列市)级,5:省(直辖市、计划单列市)属事业单位级,6:地市级,7:地市所属事业单位级,8:其他)
*/
@Field(type = FieldType.Auto)
private String effectiveLevel;
/**
* 效力级别id
*/
@Field(type = FieldType.Auto)
private Integer effectiveLevelId;
/**
* 省份
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String province;
/**
* 时效性(0:无有效期限,正在执行有效,1:有有效期限,正在执行有效,2:已废止)
*/
@Field(type = FieldType.Auto)
private String timely;
@Field(type = FieldType.Auto)
private Integer timelyId;
/**
* 发文单位分类(废弃)
*/
private String issuerClass;
/**
* 公布机关
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String issuer;
private Integer issuerId;
/**
* 协同发文单位
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String assIssuer;
@Field(type = FieldType.Auto)
private Integer assIssuerId;
/**
* 公布日期
*/
@Field(type = FieldType.Date)
private Date publicDate;
/**
* 实施日期
*/
@Field(type = FieldType.Auto)
private Date implementDate;
/**
* 废止时间
*/
@Field(type = FieldType.Auto)
private Date revocateDate;
/**
* 题注
*/
@Field(type = FieldType.Auto)
private String caption;
/**
* 主题词
*/
@Field(type = FieldType.Keyword)
private String keyword;
/**
* 主题分类(0:国家科技创新领导体制,1:科技成果转化,2:科技人才发展,3:产学研协同创新,4:中央财政科技计划和经费管理改革,5:科技治理制度,6:区域创新发展,7:科技开放合作,8:科技创新立法)
*/
@Field(type = FieldType.Auto)
private String titleClass;
@Field(type = FieldType.Auto)
private Integer titleClassId;
/**
* 公文类型(0:决定,1:通知,2:通报,3:报告,4:请示,5:批复,6:意见,7:函,8:会议纪要,9:命令(令),10:通告,11:议案,12:其他)
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String policyClass;
@Field(type = FieldType.Auto)
private Integer policyClassId;
/**
* 特色分类标识
*/
@Field(type = FieldType.Auto)
private String featuredClass;
/**
* 数据来源
*/
@Field(type = FieldType.Auto)
private String dataSource;
/**
* 正文
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String text;
/**
* 父级政策id
*/
@Field(type = FieldType.Auto)
private String parentPolicyid;
/**
* 专题id
*/
@Field(type = FieldType.Auto)
private String topicId;
/**
* 附件id
*/
@Field(type = FieldType.Auto)
private String attachId;
/**
* 审核状态(0:待审核,1:审核未通过,2:审核通过)
*/
@Field(type = FieldType.Auto)
private String status;
/**
* 是否删除(0:未删除,1:已删除)
*/
@Field(type = FieldType.Auto)
private String isDelete;
/**
* 点击量
*/
@Field(type = FieldType.Auto)
private Integer extend;
@Field(type = FieldType.Auto)
private Date createTime;
@Field(type = FieldType.Auto)
private String createId;
@Field(type = FieldType.Auto)
private String createName;
/**
* 是否废止旧政(0:是,1:否)
*/
@Field(type = FieldType.Auto)
private Integer isReplaceOld;
/**
* 同时废止旧政id
*/
@Field(type = FieldType.Auto)
private String oldpolicyId;
/**
* 旧政名称
*/
@Field(type = FieldType.Auto)
private String oldpolicyName;
/**
* 是否被新政替代(0:是,1:否)
*/
@Field(type = FieldType.Auto)
private Integer isReplaced;
/**
* 新政id
*/
@Field(type = FieldType.Auto)
private String newpolicyId;
/**
* 新政名称
*/
@Field(type = FieldType.Auto)
private String newpolicyName;
@Field(type = FieldType.Auto)
private String pdfId;
@Field(type = FieldType.Auto)
private String textNonformat;
}
创建dao使用springboot-data-jpa ,String是实体的主键。这样简单的CRUD都有了
@Component
public interface RmPolicyPublicationDao extends ElasticsearchRepository<RmPolicyPublication,String> {
}
直接注入dao和template可以直接用,简直太方便了
@Resource
private RmPolicyPublicationDao rmPolicyPublicationDao;
@Resource
private ElasticsearchRestTemplate elasticsearchTemplate;
随便写一个查询
@Override
public List<RmPolicyPublication> highQuery() {
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("text", "化部办");
logger.info("DSL:{}",matchQueryBuilder.toString());
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.withQuery(matchQueryBuilder)
.withFields("text")
.withHighlightFields(new HighlightBuilder.Field("text"))
.withHighlightBuilder(new HighlightBuilder().preTags("<span style='color:red'>").postTags("</span>"));
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
SearchHits<RmPolicyPublication> search = elasticsearchTemplate.search(nativeSearchQuery, RmPolicyPublication.class);
List<RmPolicyPublication> list = new ArrayList<>();
List<SearchHit<RmPolicyPublication>> searchHits = search.getSearchHits();
for (SearchHit<RmPolicyPublication> searchHit : searchHits) {
Map<String, List<String>> highlightFields = searchHit.getHighlightFields();
//将高亮的内容填充到content中
searchHit.getContent().setIssuer(highlightFields.get("text")==null ? searchHit.getContent().getIssuer():highlightFields.get("text").get(0));
list.add(searchHit.getContent());
}
return list;
}
完成了,剩下也没啥了 demo我直接扔 码云上了 自己看吧。
更多推荐
已为社区贡献1条内容
所有评论(0)