赞
踩
Elasticsearch 提供了插件机制,该机制可维护大量为 Elasticsearch 进行扩展的功能,包括分词器。
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/^
releases/download/v7.14.1/elasticsearch-analysis-ik-7.14.1.zip
上面命令中两个插件版本号应该和 Elasticsearch 的版本保持一致,我现在用的是 7.14.1 版本。
命令中的 elasticsearch-plugin 文件就存在bin目录下,专门用来管理 Elasticsearch 的插件。
执行命令后发现安装失败
因为我通过上面的命令安装IK中文分词器插件失败,
所以后面选择自己到github下载分词器来解压。
进入这个页面,点击选择版本后进行下载
https://github.com/medcl/elasticsearch-analysis-ik
如图,我自己的 elasticsearch 是7.14.1 版本
通过 postman 发送 : https://localhost:9200 命令 也可以查看自己的elasticsearch的版本
然后下载
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.14.1
下载完成后,我在 E:\install\Elasticsearch\elasticsearch-7.14.1\plugins\ik 这个 plugins 目录下,创建了一个 ik 文件夹,把分词器压缩包解压到里面。
因为此前安装的elasticsearch,在plugins文件夹里面,什么东西都没有。
然后重启 elasticsearch 服务器,报错了
C:\Users\JH>elasticsearch
Exception in thread "main" java.nio.file.NotDirectoryException: E:\install\Elasticsearch\elasticsearch-7.14.1\plugins\elasticsearch-7.14.1-windows-x86_64.zip
at java.base/sun.nio.fs.WindowsDirectoryStream.<init>(WindowsDirectoryStream.java:84)
at java.base/sun.nio.fs.WindowsFileSystemProvider.newDirectoryStream(WindowsFileSystemProvider.java:523)
at java.base/java.nio.file.Files.newDirectoryStream(Files.java:472)
at java.base/java.nio.file.Files.list(Files.java:3699)
at org.elasticsearch.tools.launchers.BootstrapJvmOptions.getPluginInfo(BootstrapJvmOptions.java:49)
at org.elasticsearch.tools.launchers.BootstrapJvmOptions.bootstrapJvmOptions(BootstrapJvmOptions.java:34)
at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)
重启错误提示没有elasticsearch-7.14.1-windows-x86_64.zip这个目录结构,所以我解压完之后就把压缩包给删除了。
再重启就成功了。
至此,IK 中文分词器插件弄好了,接下来就是测试了。
测试包括:通过指定分词器来创建index索引库,并测试分词器是否生效
可以把指定分词器创建 index 索引库的配置,放到一个自己创建的 ljh.json 文件 当中,内容如下:
作用:如果是使用命令来指定分词器创建index索引库的话,直接通过 -d @ljh.json ,让程序到 ljh.json 这个json文件读取这个内容就可以了,而不用我们在命令行窗口里面输入这些内容。主要就是为了方便而已。
而下面的演示,是通过postman来的,所以暂时就不用创建这个文件,只是提示有这个方法可以在使用命令的时候更方便一点而已。
{
"settings": {
"analysis": {
"analyzer": {
"default": {"tokenizer": "ik_max_word"}
}
}
}
}
上面配置文件用于指定创建 Index 索引库时的额外设置,其中 ik_max_word 就是 IK 分词器所提供的分词器,主要作用是能把内容尽可能多的分出词来。
还有一个叫 ik_smart 分词器。
建索引的话,推荐用 ik_max_word 分词器,这个是插件中的分词器
查询的话,推荐用 ik_smart 分词器
上面的指定分词器创建索引库的json文件,里面的配置写法,是从官方文档查找的,查找步骤如下:
Elasticsearch 官方文档关于索引库的设置可参考页面:
https://www.elastic.co/guide/en/elasticsearch/reference/7.14/index-modules.html
进入官方文档,选择自己对应的版本,然后看索引模块的介绍
然后点击查看分词器的设置
点击 配置文本分词器 查看
点击指定分词器
如图:上面的配置就是从官方文档的这里拷贝的。
如图:这个命令是在命令行窗口执行的
curl -k -u elastic:e32147 -X PUT https://localhost:9200/ljh_index^
-d @ljh.json -H "Content-Type: application/json"
如果使用postman,那么命令对应图形界面的操作如图:
-u 用户登录凭证, -X 请求方式
-k 忽略 SSL 验证
其中 -d 选项所指定的文件(就是上面说过的 ljh.json 配置文件)就代表了请求数据,如果你用postman,只要将该请求数据添加body中、以raw格式填写即可。
-H 就是指定内容的类型,这里是 json 格式。
这里指定通过 【ik_max_word】这个分词器创建索引库。
点击执行:https://localhost:9200/ljh_index,指定分词器创建一个叫 ljh_index 的索引库成功
然后send:https://localhost:9200/_cat/indices ,再查看elasticsearch的所有索引库,也成功查到 ljh_index 这个索引库
查看指定Index的信息(直接向指定Index发送GET请求即可)
curl -k -u elastic:e32147 https://localhost:9200/ljh_index?pretty
成功为创建的 ljh_index 索引库指定了 ik_nax_word 这个分词器
创建一个默认的索引库,不指定分词器
再查询看看,默认的索引库就看不到分词器的信息。
新建 ljh.json文件:
{
"analyzer": "ik_max_word",
"text": "火影忍者Very好看,没事可以再看一遍"
}
然后执行如下命令对 ljh.json 文件进行分词:
curl -k -u elastic:e32147 -X POST https://localhost:9200/ljh_index/_analyze?pretty=true ^
-d @ljh.json -H "Content-Type: application/json"
其中-d 选项所指定的 ljh.json 这个文件就代表了请求数据,如果你用postman,只要将该请求数据添加body中、以raw格式填写即可。
analyzer:指定使用哪个分词器
pretty=true :让响应回来的格式更好看
对于测试分词器的官方文档描述:
官方测试文档
命令跟官方操作的对应关系
在 postman 发送 : https://localhost:9200/ljh_index/_analyze 进行分词器测试成功。
再具体分析一下测试内容:
根据上面的命令,在postman这边的对应关系进行分析:
-k 忽略 SSL 证书的验证
-u 用户登录凭证
-x 这里是 post 请求
-d 命令是指定去 ljh.json 文件读取测试文本内容,用 postman 的话,直接把内容写在 Body 里面即可
-H 这里是 json 格式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。