在实际搜索需求中,常常需要对中文做拼音搜索,首字母搜索或者中文拼音首字母混合搜索。

比如要对 "广发聚财信用" 这几个中文进行拼音搜索,我们可能的搜索关键字是:“广发”,“聚财”,“guangfa”,“gfjc”,“guangfajucai”,“guangfjc”,“gfajcai”,“广发juc” 等等的混合搜索,本文主要使用elasticsearch-analysis-lc-pinyin 实现针对这种中文和拼音的混合或全拼、首字母的搜索。

该插件主要基于elasticsearch1.4.5开发出来,更高的版本是否支持请自行测试

一、安装插件

git 地址:http://git.oschina.net/music_code_m/elasticsearch-analysis-lc-pinyin

1、用git下载源码

git clone https://git.oschina.net/music_code_m/elasticsearch-analysis-lc-pinyin.git

2、编译

进入elasticsearch-analysis-lc-pinyin根目录执行如下命令

3、安装

执行编译完成后会在releases文件夹下生成elasticsearch-analysis-lc-pinyin-1.4.5.zip压缩包

将该文件拷贝到es的plugin目录下并解压

修改es的config目录下elasticsearch.yml文件声明pinyin插件,在文件末尾加上

接下来重启es就OK啦。

上面的配置定义了lc_pinyin分词器,其中

lc_index:这个分词器用来索引文档时指定的分词器

lc_search:这个分词器用在搜索时指定的分词器

现在就可以测试下分词效果了,

1).首先创建一个索引

2 ) 创建mapping

3) 索引一条数据

4)构造查询条件

搜索:guangfa

curl -XPOST http://localhost:9200/index/_search?pretty -d '

{

"query": {

"match": {

"content": {

"query": "guangfa",

"analyzer": "lc_search",

"type": "phrase",

"slop": 1,

"zero_terms_query": "NONE"

}

}

},

"highlight": {

"pre_tags": [

"",

""

],

"post_tags": [

"",

""

],

"fields": {

"content": {}

}

}

}'

返回结果:

{

"took" : 2,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"failed" : 0

},

"hits" : {

"total" : 1,

"max_score" : 4.841117,

"hits" : [ {

"_index" : "index",

"_type" : "fulltext",

"_id" : "1",

"_score" : 4.841117,

"_source": {"content":"广发聚财信用"}

"highlight" : {

"content" : [ "广发聚财信用" ]

}

} ]

}

}

搜索:guang发ju财

curl -XPOST http://localhost:9200/index/_search?pretty -d '

{

"query": {

"match": {

"content": {

"query": "guang发ju财",

"analyzer": "lc_search",

"type": "phrase",

"slop": 1,

"zero_terms_query": "NONE"

}

}

},

"highlight": {

"pre_tags": [

"",

""

],

"post_tags": [

"",

""

],

"fields": {

"content": {}

}

}

}'

{

"took" : 15,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"failed" : 0

},

"hits" : {

"total" : 1,

"max_score" : 3.6822338,

"hits" : [ {

"_index" : "index",

"_type" : "fulltext",

"_id" : "1",

"_score" : 3.6822338,

"_source":{"content":"广发聚财信用"}

"highlight" : {

"content" : [ "广发聚财信用" ]

}

} ]

}

}

搜索:j财xy

curl -XPOST http://localhost:9200/index/_search?pretty -d '

{

"query": {

"match": {

"content": {

"query": "j财xy",

"analyzer": "lc_search",

"type": "phrase",

"slop": 1,

"zero_terms_query": "NONE"

}

}

},

"highlight": {

"pre_tags": [

"",

""

],

"post_tags": [

"",

""

],

"fields": {

"content": {}

}

}

}'

{

"took" : 22,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"failed" : 0

},

"hits" : {

"total" : 1,

"max_score" : 6.682234,

"hits" : [ {

"_index" : "index",

"_type" : "fulltext",

"_id" : "1",

"_score" : 6.682234,

"_source":{"content":"广发聚财信用"}

"highlight" : {

"content" : [ "广发聚财信用" ]

}

} ]

}

}

搜索:gfjc

curl -XPOST http://localhost:9200/index/_search?pretty -d '

{

"query": {

"match": {

"content": {

"query": "gfjc",

"analyzer": "lc_search",

"type": "phrase",

"slop": 1,

"zero_terms_query": "NONE"

}

}

},

"highlight": {

"pre_tags": [

"",

""

],

"post_tags": [

"",

""

],

"fields": {

"content": {}

}

}

}'

{

"took" : 6,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"failed" : 0

},

"hits" : {

"total" : 1,

"max_score" : 6.682234,

"hits" : [ {

"_index" : "index",

"_type" : "fulltext",

"_id" : "1",

"_score" : 6.682234,

"_source":{"content":"广发聚财信用"}

"highlight" : {

"content" : [ "广发聚财信用" ]

}

} ]

}

}

混合索引java代码,Elasticsearch 实现拼音,中文,首字母混合搜索相关推荐

  1. 拼音中文首字母大写查询

    最新的商城项目需要用到拼音首字母大写查询,首先想加个字段存中文拼音的,觉得太麻烦,还是用sql解决快一些,lz用的是mysql. 解决的思路就是创建个函数调用,如果用工具navicat,则可以建立如下 ...

  2. Java获取中文拼音、中文首字母缩写和中文首字母

    我们有时候会遇到这样的情况,需要获取某些中文的拼音.中文首字母缩写和中文首字母,下面我将为大家介绍一下如何获取中文拼音的缩写. 1.项目建立和配置 首先,我们建立一个java项目,新建libs文件夹并 ...

  3. java怎么获取中文首字母_Java如何获取中文拼音首字母的方法介绍

    下面小编就为大家带来一篇java获取中文拼音首字母的实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 如下所示: import net.sourceforge.pin ...

  4. java中获取中文拼音(全拼)和中文首字母

    目录 一.引入依赖 二.代码 三.解释 1.创建格式化对象HanyuPinyinOutputFormat 2.设置输出结果的大小写格式 3.设置声调格式 4.进行汉字转拼音操作 四.作用 一.引入依赖 ...

  5. 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家

    App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各 ...

  6. 联系人排序java代码_Android仿微信联系人按字母排序

    App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各 ...

  7. java获取首字母_【Java】获取中文首字母

    获取中文首字母 有时候,比如微信上根据名字拼音首字母排序并检索.那么用Java获取中文首字母是怎么实现的呢? 代码 不多说,直接上代码:(写个工具类) public class FirstCharUt ...

  8. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  9. java首字母排序_Java实现按中文首字母排序的具体实例

    这篇文章主要介绍了Java实现按中文首字母排序的具体实例,有需要的朋友可以参考一下 要实现"按中文首字母排序"操作,可以使用java.util包下的Arrays类的sort()函数 ...

最新文章

  1. python教程哪个版本好-终于清楚python入门最好的教程
  2. 人月神话阅读笔记02
  3. 【错误记录】BLE 蓝牙搜索失效 ( 关闭了 GPS 定位导致的问题 | 蓝牙串口工具推荐 )
  4. REST资源何时应获得其自己的地址?
  5. html中输出PHP的下拉列表,html中关于下拉列表select的图文代码详解
  6. 6 日期字符串转日期_山西省导游协会关于发放电子导游证的通知 (生成日期为2020年5月28日2020年6月3日)...
  7. VM安装ubuntu18.04完成时不能上网,显示cable unplugged
  8. YurunOAuthLogin v2.0.2,第三方 OAuth2 授权一把梭
  9. 敏捷开发中的测试金字塔(转)
  10. [转载] Java:简述Java中的自定义异常
  11. 搭建GTK+开发环境
  12. 三菱plc恒压供水程序+威纶触摸屏程序 以控制水泵一用一备、一拖二、一拖三、一拖四、一拖四带小泵恒压功能
  13. n+1天 吾日三省吾身
  14. 目前网页制作的基本语言html,第二讲网页制作基本语言HTML”.ppt
  15. 即插即涨2-3%!AC-FPN:用于目标检测的注意力引导上下文的特征金字塔网络
  16. 网络空间开源威胁情报分析的人机优化策略研究
  17. 音视频SDK封装截图
  18. SpringBoot集成SpringMVC
  19. python音频特征提取_音频特征提取方法和工具汇总
  20. 9-1 数据库管理员-工作任务有哪些

热门文章

  1. lgp970 安全问题,不能识别sim卡
  2. 提升ASO榜单排名优化主要方式有哪些?
  3. wps表格宏被禁用如何解禁_(wps表格怎么设置宏)为什么每次打开excel文件都要提示启用或者禁用宏?...
  4. 语义分割评估指标MIOU
  5. laydate日期时间插件实现不用点击确定
  6. python绘制不同风格的分级统计图(Choropleth map)
  7. JavaScript BOM和DOM部分
  8. Vue中el-table追加行后固定列滚动错位问题
  9. 几何光学学习笔记(3)- 2.1光线经过单个折射球面的折射
  10. 【智能无线小车系列七】在树莓派上使用USB网卡