elasticsearch和analysis-ik的安装使用

2019-04-30 11:23:36

参考地址 elasticsearch和analysis-ik的安装使用

全文搜索和中文分词主要介绍了两组全文搜索加中文分词方案;
TNTSearch+jieba-php这套组合对于博客这类的小项目基本够用了;
但是如果最求性能追求更强大的功能的话;
那更优的选择就非 elasticsearch 莫属了;
elasticsearch 需要 java8 以上;
这里安装最新版的 java10 ;
下载 jdk

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/10.0.1+10/fb4372174a714e6b8c52526dc134031e/jdk-10.0.1_linux-x64_bin.rpm"

Bash

Copy

因为版本会一直升级;
如果执行上面这段代码返回了 ERROR 404: Not Found ;
那说明有新版本了;
那就自己去官网复制最新的下载链接;
http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html ;


选中 Accept License Agreement 然后在 jdk-10.0.1_linux-x64_bin.rpm 上右键复制链接地址;
替换上面命令中的下载链接;


安装 jdk 注意文件名要跟链接中的保持一直;

sudo rpm -ivh jdk-10.0.1_linux-x64_bin.rpm

Bash

Copy

能查看到版本号则表示安装成功;

java -version

Bash

Copy

下载 elasticsearch ;

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm

Bash

Copy

安装 elasticsearch ;

sudo rpm -ivh elasticsearch-6.2.4.rpm

Bash

Copy

安装完成后编辑配置项

vim /etc/elasticsearch/elasticsearch.yml

Bash

Copy

去掉下面三行的注释;

bootstrap.memory_lock: truenetwork.host: 192.168.0.1
http.port: 9200

Bash

Copy

然后把 network.host 改成 localhost


启动 elasticsearch ;

sudo systemctl daemon-reloadsudo systemctl enable elasticsearch.servicesudo systemctl start elasticsearch

Bash

Copy

稍等片刻给 elasticsearch 个启动的时间;
因为 elasticsearch 启动的略慢;
后续涉及到重启 elasticsearch 的时候也都记得稍等片刻;

然后查看 9200 端口检查是否成功启动;

netstat -plntu

Bash

Copy


如果半天过后仍然没有启动起来;
可能是内存不够出错;

vim /etc/elasticsearch/jvm.options

Bash

Copy

把内存改为自己服务器内存的一半以下;
比如说这里改为 512M ;


尝试启动;


sudo systemctl restart elasticsearch

Bash

Copy

查看状态是否正常;

curl 'localhost:9200'

Bash

Copy


至此 elasticsearch 算是安装完成了;
但是如果想用来搜索中文;
还需要安装中文分词;
怎么算分词呢?
全文搜索和中文分词 文章中已经简单介绍过了;
这里我们从 elasticsearch 实战一遍;
比如说 白俊遥技术博客 这句话;
elasticsearch内置的分词器对中文相当不友好;
只会一个只一个字的分;

curl -H 'Content-Type: application/json'  -XGET 'localhost:9200/_analyze?pretty' -d '{"text":"白俊遥技术博客"}'

Bash

Copy


所以我们需要一个中文分词器;
这里选择和 elasticsearch 配套的 ik-analyzer ;

安装 ik-analyzer ;

/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip

Bash

Copy

如果报下面这种错误的话可能是网络不好;

Exception in thread "main" java.net.ConnectException: Connection timed out (Connection timed out)at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

Bash

Copy

沐浴更衣大念帅白最帅;
再试几次即可;

然后重新启动下服务;

sudo systemctl restart elasticsearch

Bash

Copy

看下 ik-analyzer 的效果;

curl -H 'Content-Type: application/json'  -XGET 'localhost:9200/_analyze?pretty' -d '{"analyzer":"ik_max_word","text":"白俊遥技术博客"}'

Bash

Copy


我们可以看到 技术 和 博客 两个词语已经成功组合到了一起;
然而本博主 白俊遥 的名字被硬生生的拆成了3个字这怎么忍;


还好强大的 analysis-ik 支持自定义词库;
增加自定义词库;

vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml

Bash

Copy


增加一个 白俊遥 到词库;


echo '白俊遥' > /etc/elasticsearch/analysis-ik/baijunyao.dic

Bash

Copy

重新启动下服务;

sudo systemctl restart elasticsearch

Bash

Copy

再看下分词效果 ;

curl -H 'Content-Type: application/json'  -XGET 'localhost:9200/_analyze?pretty' -d '{"analyzer":"ik_max_word","text":"白俊遥技术博客"}'

Bash

Copy


  • 2020-04-15 21:14:13

    .d.ts与.ts的区别 .d.ts怎么用

    在TypeScript项目中直接引入Javascript包是不能使用的,因为包中缺少TypeScript类型声明,如果是自己写的包,可以考虑自己增加一个.d.ts类型声明文件,如果代码比较多或者使用的是第三方的包,自己写就比较麻烦了。第三方的包首先考虑找一个别人写好的声明文件,如果没有可以使用一些自动生成声明文件的工具。

  • 2020-04-17 09:27:38

    推荐一个老前端开发者的博客

    前端修炼场,首页标签大全greenSock前端研究VUE研究我们的作品flash技术探讨开发心得个人档案培训与招聘服务报价

  • 2020-04-17 09:41:47

    前端css博客推荐

    这个博客有大量的css内容,有svg,TweenMax等教程,抽空通读一下

  • 2020-04-17 10:20:47

    GreenSocks Animation Platform详细工作机制以及TweenMax用法

    GSAP(GreenSocks Animation Platform)是一个性能较好的前端动画库。最近在写一个前端SVG动画编辑器时选择了它作为底层的动画库。为了减少踩坑,我大致浏览了它的源代码,这篇文章主要是对我的理解进行记录。 我会先简单介绍一下这个动画库的API,再介绍它的插件机制,最后会从一个用例出发跟踪其运行机制。

  • 2020-04-17 10:39:02

    CSS 滤镜技巧与细节,实现火焰,融合等特效

    简单来说,CSS 滤镜就是提供类似 PS 的图形特效,像模糊,锐化或元素变色等功能。通常被用于调整图片,背景和边界的渲染。本文就会围绕这些滤镜展开,看看具体能怎么使用或者玩出什么花活。

  • 2020-04-17 10:42:29

    (三)TweenMax运动效果

    运动效果 实例化对象.set() 立刻运动到指定地点,不用加时间

  • 2020-04-17 11:19:55

    Vue中的is和操作DOM

    vue中is的属性引入是为了解决dom结构中对放入html的元素有限制的问题,譬如ul里面要接上li的标签,引入is的属性后,你完全可以写成这样

  • 2020-04-17 11:27:48

    TweenMax中文初级教程一

    TweenMax.js集成了GreenSock动画平台的大部分核心功能,且具有极高的兼容性。