(1)IK分词插件安装与验证
    分词器地址:
    https://github.com/medcl/elasticsearch-analysis-ik
    拼音分词:
    https://github.com/gitchennan/elasticsearch-analysis-lc-pinyin
    image.png
    1.IK analyzer插件包的下载地址:https://elasticsearch.cn/download/
    image.png
    2.插件安装过程
    进入到/opt/modules/elasticsearch/plugins目录下
    创建ik目录mkdir ik
    将下载好的插件解压到ik目录下unzip
    image.png
    3.重启ES服务

    1. bin/elasticsearch

    4.启动kibana服务进行IK分词器的验证
    测试词:中华人民共和国
    ES分词器搜索效果:
    image.png
    (2)IK自定义词库扩展配置
    在对分词做配置的时候,我们可以根据自己的需求做分词,比如:

    1. 卡弗卡大数据 -> 卡弗卡 大数据

    在config目录下创建配置自己的扩展字典my.dic

    1. vim my.dic
    2. 卡弗卡
    3. 大数据

    修改配置文件:ik/config/IKAnalyzer.cfg.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    3. <properties>
    4. <comment>IK Analyzer 扩展配置</comment>
    5. <!--用户可以在这里配置自己的扩展字典 -->
    6. <entry key="ext_dict">my.dic</entry>
    7. <!--用户可以在这里配置自己的扩展停止词字典-->
    8. <entry key="ext_stopwords"></entry>
    9. <!--用户可以在这里配置远程扩展字典 -->
    10. <!-- <entry key="remote_ext_dict">words_location</entry> -->
    11. <!--用户可以在这里配置远程扩展停止词字典-->
    12. <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    13. </properties>

    重启ES服务,通过kibana验证:
    image.png
    确实起到了自定义分词的效果,但是【大数】不是我们想要的分词
    我们可以配置自己的扩展停止词字典my_stop.dic:

    1. vim my_stop.dic
    2. 大数

    修改配置文件:ik/config/IKAnalyzer.cfg.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    3. <properties>
    4. <comment>IK Analyzer 扩展配置</comment>
    5. <!--用户可以在这里配置自己的扩展字典 -->
    6. <entry key="ext_dict">my.dic</entry>
    7. <!--用户可以在这里配置自己的扩展停止词字典-->
    8. <entry key="ext_stopwords">my_stop.dic</entry>
    9. <!--用户可以在这里配置远程扩展字典 -->
    10. <!-- <entry key="remote_ext_dict">words_location</entry> -->
    11. <!--用户可以在这里配置远程扩展停止词字典-->
    12. <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    13. </properties>

    再次验证达到我们想要的效果:
    image.png
    (3)创建ES索引和Mapping
    1.重新创建es索引
    我们在初始化导入ES数据的时候,自动生成的mapping,现在我们要进行分词搜索,必须要重新构建mapping,不能修改原有的mapping,只能重新创建一个新的mapping。

    1. GET novel/_mapping

    image.png
    拷贝内容,修改内容如下:
    修改四个部分:“name”, “category”, “author”, “novelinfo”
    image.png
    2.数据加载到新创建的索引上:novel_new

    1. POST _reindex
    2. {
    3. "source": {
    4. "index": "novel"
    5. },
    6. "dest": {
    7. "index": "novel_new"
    8. }
    9. }

    image.png
    3.给索引创建别名,为了让程序代码不动,我们创建别名novel

    1. # 删除novel
    2. DELETE novel
    3. GET _cat/indices
    4. # 创建别名,程序代码不动
    5. POST _aliases
    6. {
    7. "actions": [
    8. {
    9. "add": {
    10. "index": "novel_new",
    11. "alias": "novel"
    12. }
    13. }
    14. ]
    15. }

    分词搜索效果:
    image.png

    (4)拼音分词插件安装与验证
    1.下载地址:https://elasticsearch.cn/download/
    image.png
    2.插件安装
    说明文档地址:https://github.com/medcl/elasticsearch-analysis-pinyin
    安装方式与IK Analyzer插件相同,在/opt/modules/elasticsearch/plugins/地址下创建pinyin目录,将yinpin资源包下载之后放到创建的pinyin目录。
    3.重启ES服务
    4.启动kibana服务进行pinyin分词器的验证
    测试词:英雄
    ES分词器搜索效果:
    image.png
    (5)自定义拼音分词器
    1.使用自定义拼音分析器创建索引

    1. PUT /novel_new_ik_pinyin/
    2. {
    3. "settings" : {
    4. "analysis" : {
    5. "analyzer" : {
    6. "ik_pinyin_analyzer" : {
    7. "type" : "custom",
    8. "tokenizer" : "ik_max_word",
    9. "filter" : "my_pinyin"
    10. }
    11. },
    12. "filter" : {
    13. "my_pinyin" : {
    14. "type" : "pinyin",
    15. "keep_separate_first_letter" : false,
    16. "keep_full_pinyin" : true,
    17. "keep_original" : true,
    18. "limit_first_letter_length" : 16,
    19. "lowercase" : true,
    20. "remove_duplicated_term" : true
    21. }
    22. }
    23. }
    24. }
    25. }

    2.对自定义拼音分析器进行测试

    1. GET novel_new_ik_pinyin/_analyze
    2. {
    3. "analyzer": "ik_pinyin_analyzer",
    4. "text": "英雄"
    5. }

    image.png
    3.创建索引对应的Mapping
    将需要查询的字段加上自定义拼音分析器,因为拼音分析也包含中文分词分析。
    包括字段: author、name、category、novelinfo
    Boost:为权重设置。
    image.png
    4.对新创的索引加载数据

    1. POST _reindex
    2. {
    3. "source": {
    4. "index": "novel"
    5. },
    6. "dest": {
    7. "index": "novel_new_ik_pinyin"
    8. }
    9. }

    5.基于Kibana进行测试

    1. GET novel_new_ik_pinyin/doc/_search
    2. {
    3. "query": {
    4. "match": {
    5. "name.pinyin": "meinv"
    6. }
    7. }
    8. }

    image.png
    6.创建别名,程序代码不动

    1. POST _aliases
    2. {
    3. "actions": [
    4. {
    5. "add": {
    6. "index": "novel_new_ik_pinyin",
    7. "alias": "novel"
    8. }
    9. }
    10. ]
    11. }

    7.代码开发
    image.png
    image.png
    8.页面搜索效果
    image.png
    参考:https://blog.csdn.net/weixin_45366499/article/details/113697332