进入home目录: cd home 下载:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz 解压: tar -zxvf elasticsearch-7.15.2-linux-x86_64.tar.gz 修改文件夹名字:mv elasticsearch-7.15.2-linux-x86_64 elasticsearch 创建es 用户: es 不允许root用户执行程序 useradd es passwd es(设置密码) chown -R es:es elasticsearch su es #切换到es用户去 *** 作 主要目录: 可执行文件目录:/home/elasticsearch/bin/ 配置文件: /home/elasticsearch/config/ 如果你的机器内存有2G以上,则不用做该 *** 作,Es默认启动是要占用1G的内存 vi /home/elasticsearch/config/jvm.options -Xms512m -Xmx512m ES主要配置文件:/home/elasticsearch/config/elasticsearch.yml,以下几个参数打开配置 path.data: /home/es/data # 数据存放路径 path.logs: /home/es/logs #日志存放路径 network.host: 0.0.0.0 # 0.0.0.0 允许所有ip访问 http.port: 9200 #端口 启动ES: ./home/elasticsearch/bin/elasticsearchIK分词器(下载地址)
进入到elasticsearch 的插件目录下 cd /home/elasticsearch/plugins 下载压缩包 wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.2/elasticsearch-analysis-ik-7.15.2.zip 解压压缩包 unzip elasticsearch-analysis-ik-7.15.2.zip 重命名 mv elasticsearch-analysis-ik-7.15.2 ik #重启elasticsearch ./home/elasticsearch/bin/elasticsearch 有可能会报错:Plugin [analysis-ik] was built for Elasticsearch version 7.15.0 but version 7.12.1 is running 那就是需要你自己重新更换下ik的版本,版本一定是要匹配才可以 当然也可以有其他的办法,让版本不一致的运行起来:vi /home/elasticsearch/plugins/ik/plugin-descriptor.properties 把 elasticsearch.version 修改成跟你安装的 elasticsearch 版本一致即可,但是会不会有其他问题就不敢保证了IK目录文件说明
配置目录 extra_main.dic extra_single_word.dic extra_single_word_full.dic extra_single_word_low_freq.dic extra_stopword.dic IKAnalyzer.cfg.xml # 用来配置自定义词库 main.dic # ik原生内置的中文词库 preposition.dic quantifier.dic #放了一些单位相关的词 stopword.dic #英文停用词 suffix.dic # 放了一些后缀 surname.dic #中国的姓氏2.IK 分词器测试 2.1.1 ik_smart 最粗粒度拆分
POST _analyze { "analyzer": "ik_smart", "text": "刘大海是大元宝" } 结果: 可以明显看到拆分成了 刘、大海、是、大、元宝 5个词语2.1.2 ik_max_word 最细粒度拆分
POST _analyze { "analyzer": "ik_max_word", "text": "刘大海是大元宝" } 结果: 可以明显看到拆分成了 刘、大海、是、大、元宝 5个词语2.2 自定义分词
我想把刘大海作为一个词,那该怎么办? 创建自定义文件 vi /home/elasticsearch/plugins/ik/config/myCustom.dic 添加 刘大海 修改 IK 分词器的配置文件 vi /home/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml 如下:2.21 自定义停用词(敏感词)保存文件并重启 elasticsearch 这时候执行2.1的查询,则可以看到 刘大海 作为了一个词语返回 IK Analyzer 扩展配置 myCustom.dic
我想把刘大海作为一个停用词,那该怎么办? 创建自定义文件 vi /home/elasticsearch/plugins/ik/config/myDisabled.dic 添加 刘大海 修改 IK 分词器的配置文件 vi /home/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml 如下:问题保存文件并重启 elasticsearch 这时候执行2.1的查询,则可以看到 刘大海,被去掉了,这里可以得出一个结论,如果自定义停用词跟自定义分词,都有同一个词,则结果中是不会返回该词 原理如下:程序先分词,然后用分词的结果,去匹配 停用词列表,如果在停用词列表中,则排除;请注意,是完全匹配,而不是包含,如 自定义分词中有刘大海,而自定义停用词中有大海,刘大海还是会返回。换个思路 也就是,停用词中的词必须是在分词中存在才会被禁用 IK Analyzer 扩展配置 myCustom.dic myDisabled.dic
你已经发现了,不管我们是添加自定义停用词 还是 自定义分词 都需要重新启动 elasticsearch,如果是单机的环境,其实就还好,但是如果是分布式部署那就很麻烦了,你首先要保证每台机子都分别添加对应的词语,还有重启elasticsearch,都是一些大工程。所以我们想 能不能 远程更新呢? 接下来让我们来进入 ik 分词热更新部署3. 远程部署ik的停用词以及分词
http://xxxxx/myDisabled 文件更新了,elasticsearch 大概 1min 后,会自动拉取文件,最长时间是 1min 其中 location 是指一个 url,比如 http://xxxxx/myDisabled,该请求只需满足以下两点即可完成分词热更新。 1. 该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。 2. 该 http 请求返回的内容格式是一行一个分词,换行符用 n 即可。 满足上面两点要求就可以实现热更新分词了,不需要重启 ES 实例。 IK Analyzer 扩展配置 myCustom.dic myDisabled.dic http://xxxxx/myDisabled
如果想直接链接数据库,那可以参考 文章 IK分词器改源码实现MySql5.7.2实现动态词库实时更新
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)