1.安装Xftp

有了Xftp就可以使用Xshell进行文件传输, 这样操纵虚拟机就比较方便

Xftp下载安装

安装成功

2.安装分词器

一个 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(自定义分词器)。

1.安装 ik 分词器

es默认只有因为的分词器,就也就只能识别英文的词语, 但是对于中文词语或成语就不能识别, 所以我们需要安装中文分词器,也就是ik分词器

注意:不能用默认 elasticsearch-plugin install xxx.zip 进行自动安装 https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.4.2
对应 es 版本安装, 我的版本是v7.4.2

下载并解压(文件夹名字随便改, 为了方便我改成了ik)

使用Xftp把ik整个文件夹复制粘贴到es的挂载目录的plugins目录里

并设置ik目录权限全部人可读可写


重启es

docker restart 容器id

2.测试分词器

1.先测试默认的分词器

POST _analyze
{"text": "我是中国人"
}

响应数据

{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "<IDEOGRAPHIC>","position" : 0},{"token" : "是","start_offset" : 1,"end_offset" : 2,"type" : "<IDEOGRAPHIC>","position" : 1},{"token" : "中","start_offset" : 2,"end_offset" : 3,"type" : "<IDEOGRAPHIC>","position" : 2},{"token" : "国","start_offset" : 3,"end_offset" : 4,"type" : "<IDEOGRAPHIC>","position" : 3},{"token" : "人","start_offset" : 4,"end_offset" : 5,"type" : "<IDEOGRAPHIC>","position" : 4}]
}

可以看到默认的分词器是无法识别中文词语

2.使用ik分词器

POST _analyze
{"analyzer": "ik_smart","text": "我是中国人"
}

响应数据

{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "是","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "中国人","start_offset" : 2,"end_offset" : 5,"type" : "CN_WORD","position" : 2}]
}
POST _analyze
{"analyzer": "ik_max_word","text": "我是中国人"
}
{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "是","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "中国人","start_offset" : 2,"end_offset" : 5,"type" : "CN_WORD","position" : 2},{"token" : "中国","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 3},{"token" : "国人","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 4}]
}

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

3.自定义词库

修改ik分词器的配置文件 IKAnalyzer.cfg.xml, 文件可以通过挂载目录修改

<?xml version="1.0" encoding="UTF-8"?>
<!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><!--用户可以在这里配置远程扩展字典, ip地址要对应自己的linux虚拟机的ip --><entry key="remote_ext_dict">http://192.168.56.103:80/es/words.txt</entry><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

这个远程访问资源链接我们可以在web项目写一个服务接口来响应这么一个扩展字典数据, 也可以使用nginx来创建接口并返回数据.这里我们使用ngnix.

1.安装ngnix

先随便启动一个 nginx 实例,只是为了复制出配置目录和文件

docker pull nginx:1.10
docker run -p 80:80 --name nginx -d nginx:1.10

使用命令进入到挂载目录mydata(哪个目录都行, 你可以自己创建一个)

cd /mydata

将容器内的配置文件拷贝到当前目录, 也就是mydata目录

docker container cp nginx:/etc/nginx .
解释一下这个命令
docker container cp 表示复制容器的内容
nginx 是容器的名字
/etc/nginx 是容器内的文件夹
点"."前面有一个空格,别漏了

复制成功

为了方便管理把nginx改名为conf, 并给它创建一个父目录也叫ngnix(可以用命令修改, 我就直接使用Xftp修改, 比较快)

并设置ngnix文件夹全部人可读可写

删除原来的ngnix容器, 并创建新的ngnix容器

docker stop nginx
docker rm $ContainerId

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 \
--restart=always \
-d nginx:1.10

当我们设置文件挂载后, 发现容器总是无法正常启动, 这是因为CentOS7中的安全模块selinux把权限禁掉了,无法使用-v命令进行挂载

解决方法:添加selinux规则,将要挂载的目录添加到白名单

chcon -Rt svirt_sandbox_file_t /mydata/nginx/html
chcon -Rt svirt_sandbox_file_t /mydata/nginx/logs
chcon -Rt svirt_sandbox_file_t /mydata/nginx/conf


重启nginx

docker restart 容器id


在挂载目录/mydata/nginx/html里创建一个index.html文件

内容如下(随便写点正确html语言就行)

<h1>welcome to ngnix</h1>

浏览器访问ngnix

http://192.168.56.103:80

这样就表示ngnix安装成功了

2.添加自定义词库文件

1.在此之前, 我们先看看没添加自定义词库的效果

POST _analyze
{"analyzer": "ik_smart","text": "尚硅谷有一个乔碧萝老师"
}

响应数据

{"tokens" : [{"token" : "尚","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "硅谷","start_offset" : 1,"end_offset" : 3,"type" : "CN_WORD","position" : 1},{"token" : "有","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 2},{"token" : "一个","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "乔","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 4},{"token" : "碧","start_offset" : 7,"end_offset" : 8,"type" : "CN_CHAR","position" : 5},{"token" : "萝","start_offset" : 8,"end_offset" : 9,"type" : "CN_CHAR","position" : 6},{"token" : "老师","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 7}]
}

可以看到默认 尚硅谷, 乔碧萝 这个两个词语是无法识别的

2.在挂载目录/mydata/ngnix/html里创建es文件夹, 并在里面创建词库文件words.txt

words.txt内容就是添加我们的自定义词语

尚硅谷
乔碧萝

这里再次提醒一下
要修改ik分词器的配置文件 IKAnalyzer.cfg.xml, 文件可以通过挂载目录
/mydata/elasticsearch/plugins/ik/config 修改(也可以进入docker容器内部修改)

<?xml version="1.0" encoding="UTF-8"?>
<!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><!--用户可以在这里配置远程扩展字典, ip地址要对应自己的linux虚拟机的ip --><entry key="remote_ext_dict">http://192.168.56.103:80/es/words.txt</entry><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
这里解释一下 http://192.168.56.103:80/es/words.txt
nginx会默认把 http://192.168.56.103:80(或 http://192.168.56.103) 映射到ngnix/html文件夹
/es/words.txt就是我们的词库文件在ngnix/html文件夹中的位置

3.重启es

docker restart 容器id

3.测试

POST _analyze
{"analyzer": "ik_smart","text": "尚硅谷有一个乔碧萝老师"
}

响应数据

{"tokens" : [{"token" : "尚硅谷","start_offset" : 0,"end_offset" : 3,"type" : "CN_WORD","position" : 0},{"token" : "有","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 1},{"token" : "一个","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 2},{"token" : "乔碧萝","start_offset" : 6,"end_offset" : 9,"type" : "CN_WORD","position" : 3},{"token" : "老师","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 4}]
}

可以看到自定义分词成功了

16-GuliMall ElasticSearch安装分词器相关推荐

  1. 本地elasticsearch中文分词器 ik分词器安装及使用

    ElasticSearch 内置了分词器,如标准分词器.简单分词器.空白词器等.但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词. ik分词器就是一个标准的中文分词器.它可以根据 ...

  2. Elasticsearch 系列文章(一):Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

    介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...

  3. ElasticSearch IK 分词器快速上手

    简介: ElasticSearch IK 分词器快速上手 一.安装 IK 分词器 1.分配伪终端 我的 ElasticSearch 是使用 Docker 安装的,所以先给容器分配一个伪终端.之后就可以 ...

  4. 【Es】ElasticSearch 自定义分词器

    1.分词器 转载:https://blog.csdn.net/gwd1154978352/article/details/83343933 分词器首先看文章:[Elasticsearch]Elasti ...

  5. Elasticsearch之分词器查询分词效果

    0.引言 Elasticsearch之分词器中文的我们一般使用IK,如果没有指定分词器.默认使用的是standard分词. IK分词能将中文分成词组: standard分词则会将每个中文分成一个单个的 ...

  6. Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

    首发地址:http://www.54tianzhisheng.cn/2017/09/07/Elasticsearch-analyzers/ 介绍:ElasticSearch 是一个基于 Lucene ...

  7. ElasticSearch——IK分词器的下载及使用

    ElasticSearch--IK分词器的下载及使用 1.什么是IK分词器 ElasticSearch 几种常用分词器如下: 分词器 分词方式 StandardAnalyzer 单字分词 CJKAna ...

  8. Elasticsearch之分词器的工作流程

    前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch的分词器的一般工作流程: 1.切分关键词 2.去除停用词 3.对于英文单词,把所有字母转为小写(搜索时不区分 ...

  9. ElasticSearch环境搭建 ElasticSearch-Header安装 分词器安装 ElasticSearch7.13.2 集成SpringBoot

    ES 学习笔记 致敬kuangshen ES安装 Linux集群安装 1.解压安装包 #以7.13.2为例 tar zxvf elasticsearch-7.13.2-linux-x86_64.tar ...

最新文章

  1. word2vec的数据结构
  2. android小程序源代码_我从 Android 转到微信小程序的思考
  3. 中国工程院2019年院士增选第二轮候选人名单公布 李彦宏落选
  4. chrome控制台如何把vw显示成px_chrome用不好,BUG改到老,这些chrome 浏览器使用技巧你需要掌握...
  5. 统计 python_Python统计简介
  6. java 适用参数_Java功能的适用性
  7. [NLP]基于IMDB影评情感分析之BERT实战-测试集上92.24%
  8. PHP文件上传 (以上传txt文件为例)
  9. 对计算机组装和维护课的总结,计算机组装与维护教师工作总结
  10. 实体商店与虚拟商店购买保护流程:
  11. 【软件构造】过程与配置管理
  12. OpenG的特点及功能
  13. 进下流行移动开发框架对比
  14. 抖音无水印视频抓取与按帧截取图片
  15. 光伏组件高温自燃?台湾一屋顶光伏电站起火
  16. 2021年安全员-C证(江西省)考试题库及安全员-C证(江西省)考试技巧
  17. 统计学入门基础概念问答(统计学方法的分类、统计数据的分类等)
  18. Markdown编辑器 vs.富文本编辑器:介绍/优缺点 (未完更新中)
  19. python模拟各大网站登陆方式,以及一些爬虫程序,麻麻再也不用担心我学爬虫啦!...
  20. 华为鸿蒙OS2.0:为中国的软件行业种“根”

热门文章

  1. [T][3]洛谷 P2331 [SCOI2005] 最大子矩阵
  2. if与else if的使用区别
  3. 使用频谱分析仪测量微弱信号的3个步骤
  4. 实用工具(锐捷无线篇)-WIS
  5. 51单片机学习笔记——第2天:简易门铃设计(普中51中级实验例程)
  6. 解决MFC 的 CButton改变样式问题,使用重绘方式。(转载)
  7. java 正则表达式 电话_Java读取文件及基于正则表达式的获取电话号码功能详解...
  8. 使用函数求Fibonacci数
  9. Mysql 事件调度器详解(Event Scheduler)
  10. 投资理财-持有建设的思考