elasticsearch实战---中文拼音A-Z排序(完美解决)

栏目: 后端 · 发布时间: 6年前

内容简介:公司目前业务系统偏向后台系统,目前包含500W+数据,在许多列表中支持各种条件查询,含有大量的模糊搜索条件。由于在mysql中模糊查询效率低下,目前公司已使用es搜索引擎进行条件搜索。es版本如下:elasticsearch版本:6.3.2java client版本:rest-high-level-client 6.3.2

公司目前业务系统偏向后台系统,目前包含500W+数据,在许多列表中支持各种条件查询,含有大量的模糊搜索条件。由于在 mysql 中模糊查询效率低下,目前公司已使用es搜索引擎进行条件搜索。es版本如下:

elasticsearch版本:6.3.2

java client版本:rest-high-level-client 6.3.2

问题:业务需要部分中文字段进行a-z拼音排序。

1.实现方案

网上查阅资料,es使用 elasticsearch-analysis-pinyin 分词插件可实现 排序 效果。具体原理是通过拼音分词器将汉字分为只含有首字母的字符串(例如:刘德华----> ldh),之后通过查询此分词字段实现排序。

2.说干就干

2.1下载、安装拼音分词器

elasticsearch-analysis-pinyin下载网址: github.com/medcl/elast…

根据自己的es版本下载对应的拼音分词器版本,由于我的是6.3.2的版本,因此下载master版本的分词器。

elasticsearch实战---中文拼音A-Z排序(完美解决)

解压zip包,命令行移动到解决后的包下,执行mvn 打包命令(没有maven的自行下载):

elasticsearch实战---中文拼音A-Z排序(完美解决)

mvn打包命令: mvn package

elasticsearch实战---中文拼音A-Z排序(完美解决)

看到 BUILD SUCCESS 即为打包成功。

此时, target 目录已经生成,进入 E:\Elasticsearch\elasticsearch-analysis-pinyin-master\target\releases 目录下,解压里面的zip包,生成如下文件:

elasticsearch实战---中文拼音A-Z排序(完美解决)

将这三个文件拷贝到es安装目录下的 plugins 目录下的 pinyin 文件夹中(pinyin文件夹需要自己创建,可以任意命名):

elasticsearch实战---中文拼音A-Z排序(完美解决)

重启es,拼音分词器到此安装完成。

2.2索引setting、mapping设置

首先,创建索引时自定义索引setting:

由于我们需要将拼音分词器和ik分词器同时使用,因此在配置分析器时配置了两个。

PUT /pinyinTestIndex
{
    "index" : {
        "analysis" : {                          
            "analyzer" : {                           
               "default" : {                                   //默认分词器使用ik分词器
                     "tokenizer" : "ik_max_word"
               },
               "pinyin_analyzer" : {                           //自定义拼音分词器
                     "tokenizer" : "my_pinyin"
               }
            },
            "tokenizer" : {
                "my_pinyin" : {                                //拼音分词器配置
                    "type" : "pinyin",
                    "keep_first_letter":true,
                    "keep_separate_first_letter" : false,
                    "keep_full_pinyin" : false,
                    "limit_first_letter_length" : 20,
                    "lowercase" : true,
                    "keep_none_chinese":false
                 }
            }
        }
    }
}
复制代码

在拼音分词器配置中含有几个配置,这些配置决定了能不能按照你的要求进行排序。 keep_first_letter :包含首字母,例如:刘德华> ldh,default:true。

keep_separate_first_letter :将字母分割,例如:刘德华> l,d,h,default:false。

keep_full_pinyin :包含全拼拼音,例如:刘德华> [ liu,de,hua],default:true。

limit_first_letter_length :设置first_letter结果的最大长度,default:16。

lowercase :小写非中文字母,default:true。

keep_none_chinese : 不在结果中保留非中文字母或数字,default:true。

因此,我的拼音分词器会有如下效果 -- 如果字符串为刘德华,经过分词后成为ldh,如果字符串为刘德华A,经过分词后成为ldha,如果字符串为刘德华1,经过分词后成为ldh1。此种分词效果满足我们的业务需求,当然还有其他的配置可选,来满足不同的业务需求。

其他配置可参考elasticsearch-analysis-pinyin下载网址中的 README.md 选项进行选取。

之后,进行索引mapping文件的建立,保证字段使用拼音分词器:

POST /pinyinTestIndex/dev/_mapping 
{
    "dev": {
        "properties": {
            "name": {                                        //name字段
                "type": "text",                              //字符串类型支持分词
                "analyzer": "pinyin_analyzer",               //使用拼音分词
                 "fields": {                                 //包含的另一种不分词效果
                     "keyword": {                            
                        "type": "keyword",
                        "ignore_above": 256
                    }
                }
            }
        }
    }
}
复制代码

到此,索引创建完毕。

2.3 使用java client排序查询

//search api
 SearchSourceBuilder source = new SearchSourceBuilder();
 //排序字段   SortOrder.ASC 升序   SortOrder.DESC 降序
 source.sort("name", SortOrder.ASC);
 //索引信息
 SearchRequest searchRequest = new SearchRequest("pinyinTestIndex");
 searchRequest.types("dev");
 searchRequest.source(source);
 //查询
 SearchResponse response =  client.search(searchRequest);
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人类2.0

人类2.0

皮埃罗∙斯加鲁菲(Piero Scaruffi) / 闫景立、牛金霞 / 中信出版集团股份有限公司 / 2017-2-1 / CNY 68.00

《人类2.0:在硅谷探索科技未来》从在众多新技术中选择了他认为最有潜力塑造科技乃至人类未来的新技术进行详述,其中涉及大数据、物联网、人工智能、纳米科技、虚拟现实、生物技术、社交媒体、区块链、太空探索和3D打印。皮埃罗用一名硅谷工程师的严谨和一名历史文化学者的哲学视角,不仅在书中勾勒出这些新技术的未来演变方向和面貌,还对它们对社会和人性的影响进行了深入思考。 为了补充和佐证其观点,《人类2.0......一起来看看 《人类2.0》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

SHA 加密
SHA 加密

SHA 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具