ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Windows部署ElasticSearch,安装IK分词器

Windows部署ElasticSearch,安装IK分词器

下载ElasticSearch安装包

直接打开这个链接:Download Elasticsearch | Elastic,页面是这样的:

点击 Windows 下载的就是文件压缩包,当前最新的版本是 9.5.0,可以在 Summary 中选择历史版本:View past releases。

下载得到的是 ES 的压缩包,直接解压即可,我解压的路径是没有中文字符的,我也不清楚文件路径有中文字符会不会有什么问题。(我记得我大一刚上学的时候用户名就是中文,一直用到大三才第一次重装系统,才改成英文,在此之前都没出现过什么问题)

先来认识一下 ES 的目录结构:

bin:可执行文件目录。

config:配置文件目录。

jdk:ES 在 9.5.0 版本是自带 jdk 的,不需要本地安装 jdk,我在网上搜到是 7.x 版本才自带 jdk。

plugins:插件目录,之后安装 IK 分词器就是要放到这里。

修改配置

进入 config 目录,打开 elasticsearch.yml 文件。

直接全部删除,然后复制粘贴下面的内容就可以了。

cluster.name: my-es # 集群名称 node.name: node-1 # 节点名称 path.data: C:\Users\admin\Downloads\elasticsearch-9.5.0-windows-x86_64\data # 数据存储路径 path.logs: C:\Users\admin\Downloads\elasticsearch-9.5.0-windows-x86_64\logs # 日志存储路径 network.host: localhost # 绑定本地地址 http.port: 9200 # 端口,默认9200 discovery.type: single-node # 单节点模式,一个集群里面只有一个节点,不需要发现其他节点 xpack.security.http.ssl.enabled: false # 关闭HTTPS,方便本地访问 xpack.security.enabled: false # 免密码登录

Ctrl + S 保存修改,然后进入 bin 目录,双击 elasticsearch.bat 启动 ES 程序,会打开一个命令行界面,关闭这个界面就是关闭 ES 进程。

在我的电脑上启动比较慢,大概要等 30-40 秒才能完全启动成功。在浏览器输入 http://127.0.0.1:9200 返回下面的内容表示启动成功。

这里的 http://127.0.0.1:9200 都是在 elasticsearch.yml 文件中配置的,包括返回的响应中,name 和 cluster_name 都是我们自己配置的内容。

ES 启动成功,可以通过 http 请求获取 ES 的服务,可以安装 ES 的可视化工具,比如 Kibana。

当然,ES 需要用 http 请求调用接口,只需要能够发送 http 请求就可以了,不一定要安装 Kibana,也可以用 postman、apifox 这些接口测试软件。

甚至,可以编写 python、java 程序发送 http 请求。但是,如果你是通过 js 发送请求,那就遭老罪了。

fetch("http://127.0.0.1:9200", { "method": "GET" })

发送最简单的 GET 请求,然后就可以在控制台上看到熟悉的跨域报错:

需要在 elasticsearch.yml 中添加跨域配置:

http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE http.cors.allow-headers: "*" http.cors.allow-credentials: true

修改配置后需要重启服务才能生效,现在就可以用 js 发送 http 请求了。

安装 IK 分词器

IK 分词器在 github 的地址:IK分词器,我们赶紧打开链接,进入 Release 吧。

但是插件已经不在 github 发布了,需要去 索引:analysis-ik/stable/ 这里下载,在下载插件的时候要注意和 ES 的版本保持一致,就比如我安装的 ES 是 9.5.0,这里的插件也要下载 9.5.0 的。

下载完之后解压,将解压得到的文件放到 plugins 目录下面即可。

怎么验证是否安装成功呢?我们可以用中文进行分词检测,因为 ES 自带的分词器是偏向于英文的,如果是中文句子,会把每个汉字当成一个独立的字符进行分词,是不能辨别汉字的意思的。

fetch("http://localhost:9200/_analyze", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ analyzer: 'standard', text: '绿色的森林' }) });

如果用标准分词器,结果是这样的:

现在可以使用 IK 分词器提供的 ik_smart 和 ik_max_word 进行分词:

  • ik_smart:智能分词
  • ik_max_word:尽可能分出更多的词
  • 入库的时候可以用 ik_max_word 分词,提供足够大的样本。查找的时候用 ik_smart 分词。

换成 ik_smart 之后就可以正常理解中文意思了:

fetch("http://localhost:9200/_analyze", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ analyzer: 'ik_smart', text: '绿色的森林' }) });

jvm 堆内存优化

现在 ES 可以启动,IK 分词器也安装好了,但是这个程序非常吃内存,默认可以吃掉 8G 内存。

这是没有调整 jdk 堆内存的情况,我的笔记本是 16G 内存,再加上其他程序,内存占用就来到了 80% 左右。

进入 config 目录,打开这里的 jvm.options 文件。

  • Xms:初始堆内存
  • Xmx:最大堆内存

我改成了 2g,之后重启服务,现在最大内存就只占用 2g 左右了。

返回列表