一、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实现中文拼音分词搜索相关推荐

  1. SpringBoot2.3.x整合ElasticSearch7.6.2 实现PDF,WORD全文检索

    文章目录 1.下载安装,只下载elasticSearch.Kibana即可 插件安装 定义文本抽取管道 2.SpringBoot整合ElasticSearch application.yml 实体类 ...

  2. PMP第四章:项目整合管理

    整合思维要远离简单化和"专业化" 整合思维最重要的一点是:绝不退而求其次 整合思维还要求:远离简单化和"专业化" 整合思维的四大原则 1.  扩大决策中关键因素 ...

  3. PMP项目管理项目整合管理

    目录 1 项目整合管理概述 2 制定项目章程 3 制定项目管理计划 4 指导与管理项目工作 5 管理项目知识 6 监控项目工作 7 实施整体变更控制 8 结束项目或阶段 1 项目整合管理概述 项目整合 ...

  4. mongodb java项目 源码_spring项目整合mongodb进行开发

    spring项目整合mongodb进行开发: MongoDB的性能指标: 100个并发,插入550万条记录的平均吞吐量:大约4100条/秒 MONGODB实际上是一个内存数据库,先将数据保存到内存,然 ...

  5. 项目背景怎么描述_课程游戏背景下幼儿户外活动的组织和实施 ——记岱山县课程项目实施组活动...

    课程游戏背景下 幼儿户外活动的组织与实施 --记岱山县课程项目实施组活动 为了深入推进园本化课程实施的实践与研究,加强项目组幼儿园课程的建设与实施,提升项目组幼儿园课程质量.11月23日,县课程项目实 ...

  6. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  7. Spring Boot + BeetlSQL + H2数据库项目整合

    Spring Boot + BeetlSQL + H2数据库项目整合 这个项目是一个大佬给的,目的是看我的自学能力和基础知识的牢固程度,要求如下: 底层架构采用springboot 前端技术使用lay ...

  8. PMP-【第4章 项目整合管理】-2021-1-18(88页-115页)

    不是推荐书籍,为了今年备考PMP,所以在此地做个笔记,今后也能够回顾,同时也能激励自己坚持学下去. 1.什么是项目整合? 2.项目经理的角色很重要,当然要求也很高 3.这个图阐明了各输入输出过程的关系 ...

  9. dao加service加mysql实例_SpringBoot项目整合mybatis的方法步骤与实例

    1. 导入依赖的jar包 springboot项目整合mybatis之前首先要导入依赖的jar包,配置pom.xml文件如下: xmlns:xsi="http://www.w3.org/20 ...

最新文章

  1. 在边缘AI与云AI之间寻找平衡
  2. 从科幻灵感开始的一场数据存储基础设施实验之旅
  3. VSTO进行时––开发日志之二(VSTO Development diary II)
  4. [转载]正确解决:坑爹的0xc000007b——应用程序无法正常启动
  5. var let const声明变量的区别
  6. modelsim-altera
  7. VTK初始化New返回Null问题
  8. Linux输入法的几点补充
  9. 十分钟理解线性代数的本质_数学对于编程来说到底有多重要?来看看编程大佬眼里的线性代数!...
  10. html div分钟刷新一次啊代码_接口测试平台代码实现57首页重构5
  11. 未检测到其他显示器_同维工控机显示器显示器没反应维修技术精湛
  12. JavaScriptCore.framework基本用法(一)
  13. Android热修复技术初探(三):动态加载外部资源
  14. spring源代码分析
  15. Win10 新机,这些必装软件你拥有了吗?
  16. python输入球的半径_python程序设计:输入球体半径r,计算球体的体积和表面积
  17. 如何增加公众号阅读量和粉丝
  18. Faraday:微博广告分层实验平台架构
  19. FL Studio杂项设置页讲解(下)
  20. 二级页面全屏html,还是二级网页不能全屏怎么办? 爱问知识人

热门文章

  1. java滚动式时间控件_Wdatepicker日期控件的使用指南
  2. 腾讯SNG后台技术总监:千锤百炼造就亿万级后台架构
  3. oracle生僻字处理:生僻字输入、显示乱码
  4. MOB短信验证快速集成3.0.0及以上
  5. Foxmail新建文件夹隐藏
  6. oc语言常用的字符串函数
  7. 亚洲运动会简称亚运会,2022年的第19届在中国杭州举办,迎接亚运做一个线上健步走小程序活动,ElementById(“yayun“).innerHTML = “你好 亚运“;
  8. 【编程不良人】MongoDB最新实战教程学习笔记
  9. Java条码解码zxing
  10. 如何成为一名数据分析师:必备技能 TOP5