• 谷粒商城 高级篇 (三) --------- ElasticSearch 分词



    一、分词概述

    一个 tokenizer (分词器) 接收一个字符流,将之分割为独立的 tokens (词元,通常是独立的单词),然后输出 tokens 流。

    例如,whitespace tokenizer 遇到空白字符时分割文本。它会将文本 “Quick brown fox!” 分割为 [Quick, brown, fox!]。

    该 tokenizer (分词器) 还负责记录各个 term (词条) 的顺序或 position 位置 (用于phrase 短语和 word proximity 词近邻查询),以及 term (词条) 所代表的原始 word (单词) 的start (起始) 和 end (结束) 的 character offsets (字符偏移量) (用于高亮显示搜索的内容)。Elasticsearch 提供了很多内置的分词器,可以用来构建 custom analyzers (自定义分词器)。

    二、安装 ik 分词器

    注意:不能用默认 elasticsearch-plugin install xxx.zip 进行自动安装

    https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.4.2

    A、对应es 版本安装进入 es 容器内部 plugins 目录

    docker exec -it 容器 id /bin/bash
    
    • 1

    在这里插入图片描述

    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
    
    • 1

    B、unzip 下载的文件

    C、rm –rf *.zip

    D、mv elasticsearch/ ik

    在这里插入图片描述

    可以确认是否安装好了分词器

    cd ../bin
    
    • 1

    elasticsearch plugin list:即可列出系统的分词器

    在这里插入图片描述

    三、测试分词器

    A、使用默认

    POST _analyze
    { 
    	"text": "我是中国人"
    }
    
    • 1
    • 2
    • 3
    • 4

    B、请观察结果,使用分词器

    POST _analyze
    { 
    	"analyzer": "ik_smart", "text": "我是中国人"
    }
    
    • 1
    • 2
    • 3
    • 4

    另外一个分词器

    ik_max_word
    POST _analyze
    { 
    	"analyzer": "ik_max_word", "text": "我是中国人"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    能够看出不同的分词器,分词有明显的区别,所以以后定义一个索引不能再使用默认的 mapping 了,要手工建立 mapping,因为要选择分词器。

    四、安装 nginx

    随便启动一个 nginx 实例,只是为了复制出配置

    docker run -p 80:80 --name nginx -d nginx:1.10
    
    • 1

    如果 docker 中没有 nginx 镜像, 会默认先下载

    在这里插入图片描述

    将容器内的配置文件拷贝到当前目录:

    docker container cp nginx:/etc/nginx . 别忘了后面的点

    修改文件名称:mv nginx conf 把这个 conf 移动到 /mydata/nginx 下

    终止原容器:

    docker stop nginx
    
    • 1

    执行命令删除原容器:

    docker rm $ContainerId
    
    • 1

    创建新的 nginx;执行以下命令

    docker run -p 80:80 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx \
    -v /mydata/nginx/conf:/etc/nginx \
    -d nginx:1.10
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    五、自定义词库

    修改 /usr/share/elasticsearch/plugins/ik/config/中的 IKAnalyzer.cfg.xml

    /usr/share/elasticsearch/plugins/ik/config

    
    DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    	<comment>IK Analyzer 扩展配置comment>
    	
    	<entry key="ext_dict">entry>
    	
    	<entry key="ext_stopwords">entry>
    	
    	<entry key="remote_ext_dict">http://192.168.38.130/fenci/myword.txtentry>
    	
    	
    properties>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    原来的 xml

    
    DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    	<comment>IK Analyzer 扩展配置comment>
    	
    	<entry key="ext_dict">entry>
    	
    	<entry key="ext_stopwords">entry>
    	
    	
    	
    	
    properties>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    注:fenci 文件夹是 mydata/nginx/html 目录下的

    更新完成后,es 只会对新增的数据用新词分词。历史数据是不会重新分词的。如果想要历史数据重新分词。需要执行:POST my_index/_update_by_query?conflicts=proceed

    在这里插入图片描述

  • 相关阅读:
    【SpringBoot】一文掌握程序的打包与运行
    windbg 调试基本配置
    汽车tbox车联网系统终端
    写一个项目中使用的单例模式
    【科学文献计量】外文文献及中文文献关键词的挖掘与可视化
    java spring MVC环境中实现WebSocket
    [Servlet 4]Bean与DAO设计模式
    【Maven基础概览】Maven是什么 | Maven的优势 | Maven的核心概念 | Maven的安装和使用;【分布式架构】特点介绍 | 使用Apache Kafka进行消息传递
    二刷力扣--栈和队列
    JeecgBoot 3.4.3-GA 版本发布,开源免费的企业级低代码平台
  • 原文地址:https://blog.csdn.net/m0_51111980/article/details/126810702