刚开始的时候,索引 article 的 mapping

{"mapping":{"article":{"mappings":{"properties":{"_class":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"content":{"type":"text","fields":{"pinyin":{"type":"text","analyzer":"pinyin"}},"analyzer":"ik_max_word"},"createTime":{"type":"long"},"title":{"type":"text","fields":{"pinyin":{"type":"text","analyzer":"pinyin"}},"analyzer":"ik_max_word"}}}}}
}

title,content字段,拼音搜索,中文搜索,都没有问题,就是高亮显示的时候,拼音对应的中文,没有高亮
POST article/_doc

{"title":"测试","content":"迪斯科浪费空间四点零分了是对方身上的"
}

GET /article/_search

{"query":{"multi_match":{"query":"shenshang","fields":["content.pinyin"]}},"highlight":{"pre_tags":["<h1>"],"post_tags":["</h1>"],"fields":{"content.pinyin":{}}}
}

结果:

"highlight" : {
"content.pinyin" : [<h1></h1><h1></h1> "迪斯科浪费空间四点零分了是对方身上的"]

高亮的标签,都打在了前面,想实现的结果是 都在 对应中文上 高亮

解决方法 设置setting,自定义解析器

  1. 删除旧索引
    DELETE /article
  1. 创建一个test2的索引
PUT test2
{"settings": {"number_of_shards": 1,"number_of_replicas": 1}
}
  1. 设置setting
//设置setting,要先close
POST test2/_close
PUT test2/_settings
{"settings":{"index":{"analysis":{"analyzer":{"ik_pinyin_analyzer":{"type":"custom","tokenizer":"ik_max_word","filter":["my_pinyin"]}},"filter":{"my_pinyin":{"type":"pinyin",//下面这些,非必须"keep_separate_first_letter": false,"keep_full_pinyin": true,"keep_original": false,"limit_first_letter_length": 10,"lowercase": true,"remove_duplicated_term": true}}}}}
}
  1. 设置mapping
PUT test2/_mappings
{"properties":{"id":{"type":"long"},"name":{"type":"text","analyzer": "ik_pinyin_analyzer"}}
}
如果不设置settings的话,是找不到ik_pinyin_analyzer的,前提安装了pinyin的插件,之前就是 analyzer使用的 “pinyin"
  1. 放数据
    这样索引就设置成功了,要记得open
POST test2/_open

存放测试数据

POST test2/_doc
{"id":1,"name":"我们的时代"
}
  1. 查询
GET test2/_search
结果:
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "test2","_type" : "_doc","_id" : "MbLjiXoBlp4EId7Q-Fv9","_score" : 1.0,"_source" : {"id" : 1,"name" : "我们的时代"}}]}
}

正常查询,是可以的
7. 拼音查询

GET test2/_search
{"query":{"match": {"name": "wmen的"}},"highlight": {"pre_tags": ["<h1>"],"post_tags": ["</h1>"],"fields": {"name":{}}}
}
结果:
{"took" : 3,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 0.78201365,"hits" : [{"_index" : "test2","_type" : "_doc","_id" : "MbLjiXoBlp4EId7Q-Fv9","_score" : 0.78201365,"_source" : {"id" : 1,"name" : "我们的时代"},"highlight" : {"name" : ["<h1>我们</h1><h1>的</h1>时代"]}}]}
}

这样,highlight里面的name,就是对应中文高亮了。

所有请求,都是在 kibana中操作

我使用的是java springboot和es结合,项目中就设置setting就可以了

@Data
@Setting(settingPath = "es/setting.json")
@Document(indexName = "article",useServerConfiguration = true)
public class Article {@Idprivate String id;@MultiField(mainField = @Field(type = FieldType.Text, analyzer = "ik_max_word"), otherFields = @InnerField(suffix = "pinyin", type = FieldType.Text, analyzer = "ik_pinyin_analyzer"))private String title;@MultiField(mainField = @Field(type = FieldType.Text, analyzer = "ik_max_word"), otherFields = @InnerField(suffix = "pinyin", type = FieldType.Text, analyzer = "ik_pinyin_analyzer"))private String content;private Long createTime;
}

使用@Setting注解,在创建索引的时候,按照对应setting创建
setting.json位置 resources/es/setting.json
内容:

{"index": {"analysis": {"analyzer": {"ik_pinyin_analyzer": {"type": "custom","tokenizer": "ik_max_word","filter": ["my_pinyin"]}},"filter": {"my_pinyin": {"type": "pinyin","keep_separate_first_letter": false,"keep_full_pinyin": true,"keep_original": false,"limit_first_letter_length": 10,"lowercase": true,"remove_duplicated_term": true}}}}
}

内容就和刚才在kibana中操作的setting一样
对应 controller

 @GetMapping("/searchTitle")public Object searchTitle(@RequestParam(value = "title",required = false)String title){String preTag = "<font color='red'>";String postTag = "</font>";SortBuilder<FieldSortBuilder> sortBuilder  = SortBuilders.fieldSort("createTime").order(SortOrder.DESC);Query build = new NativeSearchQueryBuilder().withSort(sortBuilder).withQuery(QueryBuilders.multiMatchQuery(title, "title", "title.pinyin","content","content.pinyin")).withHighlightFields(new HighlightBuilder.Field("title").preTags(preTag).postTags(postTag),new HighlightBuilder.Field("content").preTags(preTag).postTags(postTag),new HighlightBuilder.Field("title.pinyin").preTags(preTag).postTags(postTag),new HighlightBuilder.Field("content.pinyin").preTags(preTag).postTags(postTag)).build();SearchHits<Article> search = elasticsearchRestTemplate.search(build, Article.class);return search;}

我搜索的,就是title,content和对应拼音
对应 kibana中代码

GET /article/_search
{"query":{"multi_match": {"query": "shenshang","fields": ["title.pinyin","content.pinyin","title","content"]}},"highlight": {"pre_tags" : ["<tag1>"],"post_tags" : ["</tag1>"],"fields": {"title.pinyin": {},"content.pinyin": {},"content": {},"title": {}}}
}

java中结果 接口传参为 disike

{"totalHits": 1,"totalHitsRelation": "EQUAL_TO","maxScore": "NaN","scrollId": null,"searchHits": [{"index": "article","id": "67IJinoBlp4EId7QBl4Z","score": "NaN","sortValues": ["1625813486007"],"content": {"id": "67IJinoBlp4EId7QBl4Z","title": "测试","content": "迪斯科浪费空间四点零分了是对方身上的","createTime": "1625813486007"},"highlightFields": {"content.pinyin": ["<font color='red'>迪斯科</font>浪费空间<font color='red'>四</font>点零分了是对方身上的"]},"innerHits": {},"nestedMetaData": null}],"aggregations": null,"empty": false
}

对 es 理解的还不是很深,有不对的地方,欢迎指出

es使用pinyin搜索,对应中文没有高亮显示相关推荐

  1. 【ES】ES 拼音 Pinyin 分词器

    1.概述 转载:https://www.cnblogs.com/sanduzxcvbnm/p/12083606.html Elastic的Medcl提供了一种搜索Pinyin搜索的方法.拼音搜索在很多 ...

  2. 商城-商品搜索(品牌统计、规格统计、条件筛选、搜索分页排序、高亮显示)

    用户搜索的时候,除了使用分类搜索外,还有可能使用品牌搜索,所以我们还需要显示品牌数据和 规格数据,品牌数据和规格数据的显示比较容易,都可以考虑使用分类统计的方式进行分组实现. 1 品牌统计 看下面的S ...

  3. 基于php的Sphinx以及coreseek的全文搜索,中文分词的使用(一)

    基于php的Sphinx以及coreseek的全文搜索,中文分词的使用(一) ##1.sphinx简介 1.什么是sphinx Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检 ...

  4. ES 查询示例 搜索 分组 去重 分页 排序

    es 查询示例 搜索 分组 去重 分页 排序 java 语句 @Autowiredprivate static RestHighLevelClient client;@PostConstructpub ...

  5. 雅虎搜索的中文官方Blog推出

    雅虎搜索日志是雅虎搜索的中文官方Blog,于2006年06月06日开通.这个纯粹的中文Blog,给人感觉很亲切,让咱再次与雅虎中国亲密接触.周鸿袆担任雅虎中国副总裁的2年当中,主要的战略是让雅虎中国在 ...

  6. 【Python】pinyin模块将中文转为拼音

    [Python]pinyin模块将中文转为拼音 示例代码 示例代码 可以看到数据不是很规范,城市名称既有中文又有英文,而且上海被存储为ShangHai和Shanghai. 对于上海的问题,我们将拼音全 ...

  7. lucene的建立索引,搜索,中文分词

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包. 现在最新的lucene已经更新到6.0版本了.但是这个最新版,需要适配jdk1.80以 ...

  8. 微信小程序input搜索解决中文问题(输入拼音) 实时搜索节流处理(bindinput 节流)

    微信小程序input搜索解决中文问题(输入拼音) & 实时搜索节流处理(bindinput 节流) 问题 微信小程序输入拼音的时候, 还没有完全输入完成, bindinput就会触发, 当我输 ...

  9. ElasticSearch实战系列02 SpringBoot + ElasticSearch 7.7 实现高仿QQ用户搜索:中文+拼音混合检索,并高亮显示

    本文导读 本文仿照QQ的用户搜索,搭建一个中文+拼音的混合检索系统,并高亮显示检索字段.全文共分为以下几部分: 1.项目简介,包括需求描述与分析等: 2.项目开发,通过两个版本的index,验证并完成 ...

最新文章

  1. 基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序
  2. 图像去模糊之初探--Single Image Motion Deblurring
  3. python普通菜单_python多级菜单
  4. Laravel——Passport OAuth
  5. html网页钩子,HTML5中的meta标签 和 IE浏览器能识别的钩子
  6. .NET Core 3.1通用主机原理及使用
  7. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序
  8. 宿主机为linux、windows分别实现VMware三种方式上网(转)
  9. DELL服务器R230 RIAD1创建
  10. c语言解析sql语句_解析SQL语句比解析类C语言更麻烦?
  11. redis数据类型-列表(List)
  12. LINUX设备驱动之platform总线
  13. python--下载文件并将文件放到指定文件夹
  14. UE4 Slate十一 独立程序,制作BlankProgrammer 待完善
  15. 学习笔记(1):Matlab小白入门必备教程-数据的基本运算
  16. 【项目实战】Airbnb爱彼迎-数据分析与建模
  17. 图形驱动程序和显卡驱动什么区别_电脑游戏显卡和专业图形显卡存在的区别
  18. python输出空心等腰三角形_python学习,打印等腰直角三角形 实心正方形空心正方形...
  19. JS 内存泄漏与垃圾回收机制
  20. 什么是电口模块?它和光模块有什么区别?

热门文章

  1. (六十四)朴素贝叶斯算法
  2. 惊了,Alibaba内部“Java学习宝典”,居然系统到P7 ,学到就是赚到
  3. html下拉刷新原理,下拉刷新的基本原理
  4. 魅蓝Note2跑分 MT6753性能究竟如何
  5. 应用性能测试关注点(来自听云)
  6. Revit二开-设备(消防箱)翻模
  7. 【Axure10视频教程】第九章 设置选中
  8. MesaLink v0.7.0发布 | 迎接TLS 1.3时代 更快更安全
  9. 企业江湖VS管理理性
  10. EVPN 路由之Type1 per ESI