记一次springboot2.3.*项目整合elasticsearch7.6.2实现中文拼音分词搜索
一、elasticsearch官网下载:Elasticsearch 7.6.2 | Elastic
二、拼音、ik、繁简体转换插件安装
ik分词:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.
拼音分词:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characters and Pinyin.
繁简体转换:GitHub - medcl/elasticsearch-analysis-stconvert: STConvert is analyzer that convert chinese characters between traditional and simplified.中文简繁體互相转换.
安装过程:从github上下载源码到本地,idea打开项目,修改对应项目中的pom.xml将
<elasticsearch.version>7.6.2</elasticsearch.version>修改为对应的elasticsearch版本
,alt+f12打开cmd命令界面,输入mvn install,项目编译成功后会在对应目录中生成对应zip包,效果如图:
将对应zip包解压到elasticsearch存放目录的plugins下:
然后启动elasticsearch.bat,
这样对应插件就算安装成功了
三、springboot项目集成elasticsearch,pom.xml修改如下
<properties><elasticsearch.version>7.6.2</elasticsearch.version><remote-passwd>123456</remote-passwd></properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>
</dependencies>
spring-boot.yml新增elasticsearch配置:
spring:data:elasticsearch:cluster-name: elasticsearchcluster-nodes: 127.0.0.1:9300repositories:enabled: true
document查询对象:
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;import java.io.Serializable;@Data
@Builder
@Setting(settingPath = "/json/esTest_setting.json")
@Mapping(mappingPath = "/json/esTest_mapping.json")
@Document(indexName = "chin_new_index")public class EsTest implements Serializable {/***使用步骤:一、首先使用下面的命令在elasticsearch中创建对应的索引、setting、mapping1.创建索引并设置settingpostman put http://localhost:9200/chin_new_index json:xxxx_setting.json2.给索引设置mapping 7.x以后逇版本默认都是type为_doc 还需要加上 include_type_name=true , 但是该属性会在8.x废弃 postman put http://localhost:9200/chin_test_index/_mapping/_doc?include_type_name=true json: xxxx_mapping.json3.如何查看对象的分词情况:postman post http://localhost:9200/chin_new_index/_doc/{你想查询对象的id}/_termvectors?fields={你的字段名字}二、启动项目 初始化elsaticsearch 将数据库中的数据放入es中, 使用查询方法即可进行查询了**/@Idprivate String id ;private String title;private String content;public EsTest () {}public EsTest (String id, String title, String content) {this.id = id;this.title = title;this.content = content;}}
在src/main/sources目录下新建json文件夹存放setting、mapping
setting.json
{"settings": {"index": {"analysis": {"filter": {"edge_ngram_filter": {"type": "edge_ngram","min_gram": 1,"max_gram": 50},"pinyin_simple_filter": {"type": "pinyin","keep_separate_first_letter": true,"keep_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"lowercase": true,"remove_duplicated_term": true}},"char_filter": {"tsconvert": {"type": "stconvert","convert_type": "t2s"}},"analyzer": {" ikSearchAnalyzer": {"type": "custom","tokenizer": "ik_max_word","char_filter": ["tsconvert"]},"pinyinSimpleIndexAnalyzer": {"type": "custom","tokenizer": "ik_max_word","filter": ["pinyin_simple_filter","edge_ngram_filter","lowercase"]}}}}}
}
mapping.json
{"properties": {"id": {"type": "text"},"content": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_max_word","fields": {"pinyin": {"type": "text","analyzer": "pinyinSimpleIndexAnalyzer","search_analyzer": "pinyinSimpleIndexAnalyzer"}}},"title": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_max_word","fields": {"pinyin": {"type": "text","analyzer": "pinyinSimpleIndexAnalyzer","search_analyzer": "pinyinSimpleIndexAnalyzer"}}}}
}
curd接口
@Repository
public interface EsTestRepository extends ElasticsearchRepository<EsTest, String> {}
controller:
@RestController
@RequestMapping("testEs")
@Api(tags = "elasticsearch测试")
public class EsMaintenanceController {//这里用你自己的连接数据库的services用来取数据@Autowiredprivate YourServices yourService;@Autowiredprivate EsTestRepository searchService;@Autowiredprivate ElasticsearchRestTemplate searchTemp;/*** @return */@GetMapping("initEs")@ApiOperation(value = "初始化es", notes = "")public void save() {searchService.deleteAll();searchTemp.putMapping(EsMaintenance.class);List<SqlEntity> dataList = yourService.selectAll();;List<EsTest> esList = new ArrayList<>();dataList.forEach(item ->{esList.add(new EsMaintenance(item.getId() , item.getName(), item.getContent()));});searchService.saveAll(esList);}@GetMapping("searchByKey")@ApiOperation(value = "根据关键字搜索", notes = "")public R searchByKey(@RequestParam String key ){/*** 不指定具体字段,在所有field中进行查询*///QueryStringQueryBuilder query = QueryBuilders.queryStringQuery(key);/*** 这里使用了多字段匹配方法,multiMatchQuery (String key , String... fieldName)* withPageable 采用 分页查询, elasticsearch分页是从第0页开始的*//* MultiMatchQueryBuilder queryBuilder2 = QueryBuilders.multiMatchQuery(key, "title", "content", "title.pinyin" , "content.pinyin");NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery( queryBuilder2 ).withPageable(PageRequest.of(0, 10)).build();*/DisMaxQueryBuilder disMaxQuery = QueryBuilders.disMaxQuery();MatchQueryBuilder title = QueryBuilders.matchQuery("title", key);MatchQueryBuilder content = QueryBuilders.matchQuery("content", key);MatchQueryBuilder pinyContent = QueryBuilders.matchQuery("content.pinyin", key);MatchQueryBuilder pinyTitle = QueryBuilders.matchQuery("title.pinyin", key);disMaxQuery.add(title);disMaxQuery.add(content);disMaxQuery.add(pinyContent);disMaxQuery.add(pinyTitle);NativeSearchQueryBuilder nativBuilder = new NativeSearchQueryBuilder().withQuery(disMaxQuery);NativeSearchQuery query = nativBuilder.build();//单个字段模糊匹配查询/*NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("title", key)).withQuery(QueryBuilders.matchQuery("content", key)).build();*/Iterable<EsMaintenance> search = searchService.search(query).getContent();JSON.toJSON(search));return R.ok().put("data", search);}@GetMapping("searchHighValue")@ApiOperation(value = "根据关键字搜索高亮显示", notes = "")public R searchHighValue(@RequestParam String key){//设置查询条件BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("title", key)).should(QueryBuilders.matchQuery("content", key)).should(QueryBuilders.matchQuery("title.pinyin", key)).should(QueryBuilders.matchQuery("content.pinyin", key));NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(queryBuilder)//设定高亮显示字段.withHighlightFields(new HighlightBuilder.Field("title"), new HighlightBuilder.Field("content"),new HighlightBuilder.Field("title.pinyin"), new HighlightBuilder.Field("content.pinyin") )//设置高亮显示内容样式.withHighlightBuilder(new HighlightBuilder().preTags(" <p style='color:red'>").postTags("</p>")).build();SearchHits<EsMaintenance> search = searchTemp.search(query, EsMaintenance.class);List<SearchHit<EsMaintenance>> datas = search.getSearchHits();ArrayList<EsMaintenance> returnList = new ArrayList<>();//处理高亮显示数据for (SearchHit<EsMaintenance> item : datas) {Map<String, List<String>> fields = item.getHighlightFields();item.getContent().setTitle(fields.get("title") == null ? item.getContent().getTitle() : fields.get("title").get(0));item.getContent().setContent(fields.get("content") == null ? item.getContent().getContent() : fields.get("content").get(0));item.getContent().setTitle(fields.get("title.pinyin") == null ? item.getContent().getTitle() : fields.get("title.pinyin").get(0));item.getContent().setContent(fields.get("content.pinyin") == null ? item.getContent().getContent() : fields.get("content.pinyin").get(0));returnList.add(item.getContent());}return R.ok().put("data", returnList);}}
记一次springboot2.3.*项目整合elasticsearch7.6.2实现中文拼音分词搜索相关推荐
- SpringBoot2.3.x整合ElasticSearch7.6.2 实现PDF,WORD全文检索
文章目录 1.下载安装,只下载elasticSearch.Kibana即可 插件安装 定义文本抽取管道 2.SpringBoot整合ElasticSearch application.yml 实体类 ...
- PMP第四章:项目整合管理
整合思维要远离简单化和"专业化" 整合思维最重要的一点是:绝不退而求其次 整合思维还要求:远离简单化和"专业化" 整合思维的四大原则 1. 扩大决策中关键因素 ...
- PMP项目管理项目整合管理
目录 1 项目整合管理概述 2 制定项目章程 3 制定项目管理计划 4 指导与管理项目工作 5 管理项目知识 6 监控项目工作 7 实施整体变更控制 8 结束项目或阶段 1 项目整合管理概述 项目整合 ...
- mongodb java项目 源码_spring项目整合mongodb进行开发
spring项目整合mongodb进行开发: MongoDB的性能指标: 100个并发,插入550万条记录的平均吞吐量:大约4100条/秒 MONGODB实际上是一个内存数据库,先将数据保存到内存,然 ...
- 项目背景怎么描述_课程游戏背景下幼儿户外活动的组织和实施 ——记岱山县课程项目实施组活动...
课程游戏背景下 幼儿户外活动的组织与实施 --记岱山县课程项目实施组活动 为了深入推进园本化课程实施的实践与研究,加强项目组幼儿园课程的建设与实施,提升项目组幼儿园课程质量.11月23日,县课程项目实 ...
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- Spring Boot + BeetlSQL + H2数据库项目整合
Spring Boot + BeetlSQL + H2数据库项目整合 这个项目是一个大佬给的,目的是看我的自学能力和基础知识的牢固程度,要求如下: 底层架构采用springboot 前端技术使用lay ...
- PMP-【第4章 项目整合管理】-2021-1-18(88页-115页)
不是推荐书籍,为了今年备考PMP,所以在此地做个笔记,今后也能够回顾,同时也能激励自己坚持学下去. 1.什么是项目整合? 2.项目经理的角色很重要,当然要求也很高 3.这个图阐明了各输入输出过程的关系 ...
- dao加service加mysql实例_SpringBoot项目整合mybatis的方法步骤与实例
1. 导入依赖的jar包 springboot项目整合mybatis之前首先要导入依赖的jar包,配置pom.xml文件如下: xmlns:xsi="http://www.w3.org/20 ...
最新文章
- 在边缘AI与云AI之间寻找平衡
- 从科幻灵感开始的一场数据存储基础设施实验之旅
- VSTO进行时––开发日志之二(VSTO Development diary II)
- [转载]正确解决:坑爹的0xc000007b——应用程序无法正常启动
- var let const声明变量的区别
- modelsim-altera
- VTK初始化New返回Null问题
- Linux输入法的几点补充
- 十分钟理解线性代数的本质_数学对于编程来说到底有多重要?来看看编程大佬眼里的线性代数!...
- html div分钟刷新一次啊代码_接口测试平台代码实现57首页重构5
- 未检测到其他显示器_同维工控机显示器显示器没反应维修技术精湛
- JavaScriptCore.framework基本用法(一)
- Android热修复技术初探(三):动态加载外部资源
- spring源代码分析
- Win10 新机,这些必装软件你拥有了吗?
- python输入球的半径_python程序设计:输入球体半径r,计算球体的体积和表面积
- 如何增加公众号阅读量和粉丝
- Faraday:微博广告分层实验平台架构
- FL Studio杂项设置页讲解(下)
- 二级页面全屏html,还是二级网页不能全屏怎么办? 爱问知识人
热门文章
- java滚动式时间控件_Wdatepicker日期控件的使用指南
- 腾讯SNG后台技术总监:千锤百炼造就亿万级后台架构
- oracle生僻字处理:生僻字输入、显示乱码
- MOB短信验证快速集成3.0.0及以上
- Foxmail新建文件夹隐藏
- oc语言常用的字符串函数
- 亚洲运动会简称亚运会,2022年的第19届在中国杭州举办,迎接亚运做一个线上健步走小程序活动,ElementById(“yayun“).innerHTML = “你好 亚运“;
- 【编程不良人】MongoDB最新实战教程学习笔记
- Java条码解码zxing
- 如何成为一名数据分析师:必备技能 TOP5