文章目录

  • Spring Boot使用docker整合ElasticSearch ik分词搜索和拼音搜索
    • 准备工作
      • 安装ik分词器
      • 安装pinyin插件
    • Spring Boot进行分词和拼音查询
      • 创建setting和mapping文件
      • 将setting和mapping配置到UserEntity中
      • 编写测试类
    • 总结

Spring Boot使用docker整合ElasticSearch ik分词搜索和拼音搜索

前面的blog已经处理完Spring Boot和docker安装配置ElasticSearch,这篇blog主要讲一下使用docker安装ElasticSearch ik分词器和拼音搜索功能。

准备工作

安装ik分词器

我们直接使用elasticsearch-plugin安装ik分词器

// 进入elasticsearch容器
docker exec -it elasticsearch /bin/bash// 安装ik分词器7.8.0./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip

安装过程如下:

安装pinyin插件

和ik分词器一样我们同样使用elasticsearch-plugin安装pinyin插件

// 安装ik分词器7.8.0./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.8.0/elasticsearch-analysis-pinyin-7.8.0.zip


检查一下plugins目录查看是否安装成功,准备工作就完成了。

Spring Boot进行分词和拼音查询

前面已经完成了一部分编码工作了,请查看Spring Boot 使用docker整合ElasticSearch,那么这次我们就继续在上次的基础上改造,使其支持拼音和分词搜索。

创建setting和mapping文件

文件存放在resource目录下,为了方便区分,所以我新建了一个elasticsearch目录。

elasticsearch_mapping.json文件内容

{"block": {"properties": {"userName": {"type": "text","analyzer": "pinyin_analyzer","search_analyzer": "pinyin_analyzer","fields": {"pinyin": {"type": "string","ignore_above": 256}}},"sex": {"type": "keyword","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"age": {"type": "keyword","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}
}

elasticsearch_setting.json文件内容

{"index": {"analysis": {"analyzer": {"pinyin_analyzer": {"tokenizer": "my_pinyin"}},"tokenizer": {"my_pinyin": {"type": "pinyin","keep_first_letter": true,"keep_separate_first_letter": false,"keep_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"lowercase": true,"remove_duplicated_term": true}}}}
}

将setting和mapping配置到UserEntity中

如果之前已经创建了索引了,则需要删除,或者重新创建新的所有才能创建分词和拼音相关索引,支持分词和拼音搜索

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 org.springframework.data.elasticsearch.annotations.Mapping;
import org.springframework.data.elasticsearch.annotations.Setting;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Setting(settingPath = "classpath:elasticsearch/elasticsearch_setting.json")
@Mapping(mappingPath = "classpath:elasticsearch/elasticsearch_mapping.json")
@Document(indexName = "user")
public class UserEntity {@Idprivate Long userId;@Field(type = FieldType.Text, analyzer = "pinyin", searchAnalyzer = "pinyin")private String userName;@Field(type = FieldType.Keyword)private Integer age;@Field(type = FieldType.Keyword)private Integer sex;}

编写测试类

依旧是在之前的测试类基础上进行编写,首先执行save方法批量插入一些数据方便测试,然后执行searchByUserName查看结果。

import com.example.elasticsearch.entity.UserEntity;
import com.example.elasticsearch.service.ElasticSearchService;
import com.example.elasticsearch.util.StringUtils;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;import javax.annotation.Resource;@SpringBootTest
class ElasticsearchApplicationTests {@Resourceprivate ElasticSearchService elasticSearchService;/*** @Author David* @Description 批量插入测试数据**/@Testvoid save() {List<String> randomName = StringUtils.getRandomName(100);List<UserEntity> list = new ArrayList<>(100);for (int i = 0; i < randomName.size(); i++) {UserEntity userEntity = UserEntity.builder().userId(i + 1L).userName(randomName.get(i)).age(ThreadLocalRandom.current().nextInt(50)).sex(ThreadLocalRandom.current().nextInt(2)).build();list.add(userEntity);}elasticSearchService.saveUser(list);}/*** @Author David* @Description 根据id搜索**/@Testvoid findById() {UserEntity byId = elasticSearchService.findById(1L);System.out.println(byId);}/*** @Author David* @Description 搜索**/@Testvoid searchByUserName() {List<UserEntity> da = elasticSearchService.searchByUserName("wpt");System.out.println(da);List<UserEntity> da1 = elasticSearchService.searchByUserName("闻平涂");System.out.println(da1);}}
// searchByUserName output
[UserEntity(userId=7, userName=闻平涂, age=44, sex=1)]
[UserEntity(userId=7, userName=闻平涂, age=44, sex=1)]

总结

ElasticSearch使用非常广泛,支持的场景也非常多,除了分词和拼音之外,还有像繁体搜索,以及高亮显示都用的比较多,后面一一梳理,如果对你有帮助记得关注支持一下哦,这是我前进的最大动力!

Davids实操笔记:Spring Boot使用docker整合ElasticSearch ik分词搜索和拼音搜索相关推荐

  1. Spring Boot项目中集成Elasticsearch,并实现高效的搜索功能

    Spring Boot项目中集成Elasticsearch 前言 环境准备 引入依赖 配置Elasticsearch连接信息 定义实体类 定义Elasticsearch操作接口 实现搜索功能 总结 前 ...

  2. Spring Boot(九):整合elasticsearch并使用logstash同步数据

    一到周末,就想在家里躺尸,逛逛B站,看看直播,打打游戏,美哉美哉.当然,作为一名有自我修养的程序员,学习也是必不可少的.前段时间,我司的另一个项目组接手的项目中用到了elasticsearch,我就查 ...

  3. Davids实操笔记:docker安装使用小米SQL分析工具Soar

    文章目录 docker安装使用小米SQL分析工具Soar 背景 介绍 官网简介 功能特点 线路图 开始安装 使用Soar 访问SOAR-WEB SOAR配置 SQL分析 总结 docker安装使用小米 ...

  4. Spring Boot与Docker(一):微服务架构和容器化概述

    本文讲的是Spring Boot与Docker(一):微服务架构和容器化概述,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列四部曲的第一篇,本篇将会对我们 ...

  5. 浪潮式发售实操笔记(中国版)

    浪潮式发售实操笔记(中国版) 覃小龙 中国互联网权威营销专家 沃克其人 产品发售公式的发明人叫杰夫·沃克,一个精彩的吊丝逆袭人生,他堪称互联网赚钱速度最快的人,目前是亚马逊创始人贝佐斯的创业教练. 杰 ...

  6. 实操笔记——笔记本加内存及清灰

    实操笔记--笔记本加内存及清灰 写在前面 一.加内存 1 如何确定能否增加 1)当前电脑内存 2)系统是否支持 3)当前电脑支持的最大内存 4)内存条插槽数 2 如何选择内存条 首选确定当前内存条是几 ...

  7. 基于创龙TMS320C665x平台GigE工业相机图像采集案例实操笔记

    基于创龙TMS320C665x平台GigE工业相机图像采集案例实操笔记 开发平台:创龙TL665x-EasyEVM: 基于TI KeyStone C66x多核定点/浮点DSP TMS320C665x, ...

  8. Spring Boot 2.x整合Quartz

    宣传官网 xb.exrick.cn 在线Demo xboot.exrick.cn 开源版Github地址 github.com/Exrick/x-bo- 开发文档 www.kancloud.cn/ex ...

  9. spring boot使用Jedis整合Redis

    文章目录 spring boot使用jedis整合redis 总结 Spring Boot整合Redis有两种方式,分别是Jedis和RedisTemplate,那么它们二者有什么区别呢? 1.Jed ...

  10. [Spring Boot]Druid datasource整合及配置

    [Spring Boot]Druid datasource整合及配置 创建Spring Boot项目 这里使用默认配置创建一个空项目 demo-druid 用作演示,可跳过这一段: 只勾选基本的Spr ...

最新文章

  1. 字符串截取固定长度的方法
  2. 【数据结构】最小生成树 Prim算法 Kruskal算法
  3. 更高效的PacBio长read纠错算法的研究
  4. 【连载】优秀程序员的45个习惯之45——及时通报进展与问题
  5. SQL SERVER占用服务器内存过高的解决方案
  6. Java中Map的entrySet()详解 || Map.Entry的详解
  7. Swift 与 JSON 数据
  8. fscanf返回值被忽略怎么解决_pytest的fixture怎么用?
  9. CF 71C. Round Table Knights
  10. vs的windows应用程序上的鼠标为什么一直是加载状态?_了解 JavaScript 应用程序中的内存泄漏...
  11. 实习周记---20180519
  12. 2022SPSSPRO认证杯数学建模B题第二阶段方案及赛后总结:唐宋诗的定量分析与比较研究
  13. 前端常用标签与注意事项
  14. GCC学习(动态库与静态库.a与.so)
  15. 7个技巧让你写出干净的 TSX 代码
  16. unity 开发EasyAR发布IOS和安卓坑记录
  17. Hey Future!
  18. MatLab矩阵的创建、寻访和运算
  19. VC++获取不同Windows版本的方法
  20. 数据规模超大,分布密集,数据存储难

热门文章

  1. 怎么把音频转换成mp3格式?
  2. 测试用例的设计要素以及设计测试用例的方法
  3. word向下箭头符替换和打印,去掉多余换行
  4. 百度经纬度和google经纬度互转
  5. 设计师经常逛的色彩搭配网站—配色方案吧
  6. html网页实现分享功能,H5网页实现微信分享功能
  7. win10 无法安装Hp1020和HP1106打印机问题
  8. 图灵接口 php,图灵机器人API接口
  9. Python 复数类型(详解)
  10. 关于jsp跳转到servlet显示 “Served at: /JavaWebPractice”或空白页的问题