目录

一、安装ES

二、相关配置

1、访问配置    

2、插件配置


       

 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 ES)是目前全文搜索引擎的首选。

它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

        Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

关于Es的介绍与优点,本文不再赘述直接进入正题。如想对ES的操作等有一定了解,

推荐大家阅读看完这篇你还学不会Elasticsearch,你打我

一、安装ES

1、点击Download Elasticsearch Free | Get Started Now | Elastic | Elastic到官网进行下载,选择自己所需的适合版本即可。本系列文章使用的ES版本为7.13.2

2、推荐直接下载软件包,msi安装程序目前还处于测试阶段,有比较多的未知问题,需要自己研究。

下载完成之后,将程序解压到自己电脑,打开解压目录,进入bin文件夹,双击elasticsearch即可启动ES服务。(如果启动失败,查看是否是Java环境的问题,但是高版本的ES由于自带jdk,一般不会出现该问题,可按错误提示,自行搜索解决办法)

服务启动成功后,访问localhost:9200,看到如下显示,代表安装成功。

二、相关配置

1、访问配置    

        由于ES可直接通过http请求访问,所以将9200端口直接暴露在网络当中十分危险,我们需对访问进行限制。

        在ES安装目录下,进入config目录,查看elasticsearch.yml配置文件

在配置文件中,修改network.host配置可控制允许访问的地址,由于博主是自己测试,所以设为了允许所有来源访问,如对访问安全有要求,建议配置为具体的IP地址。

除了设置具体的IP允许访问外,我们还可为ES配置密码,要求所有访问9200端口的用户,需先进行身份验证才能使用。

        首先,我们在elasticsearch.yml配置文件中,添加如下配置:

#配置网络请求中的相关参数及设置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
#配置身份验证
xpack.security.enabled: true

然后,关闭我们的ES服务,在bin目录下启动cmd,以如下命令启动

elasticsearch -d

运行上述命令之后,再重启一个cmd窗口,执行一下命令

elasticsearch-setup-passwords interactive

根据提示,完成密码的设置之后,重启ES服务,再访问9200端口,会发现要求进行身份验证。

我们输入刚才设置的密码之后,即可访问

2、插件配置

        分词是全文搜索引擎必用的技术,由于ES原生的分词器不支持中文,所以我们需要安装一个中文的分词器。

        IK分词器是一款国人开发的相对简单的中文分词器。首先我们访问 IK分词器下载与ES对应版本的中文分词器。将解压后的后的文件夹放入ES根目录下的plugins/ik目录下(ik目录要手动创建),重启ES即可使用。

IK提供了两个分词算法ik_smart和ik_max_word。其中ik_smart为智能最少切分;ik_max_word为最细粒度划分。

  • ik_max_word:会将文本做最细粒度的拆分,例如「我是程序员」会被拆分为「我、是、程序员、程序、员」。
  • ik_smart:会将文本做最少切分,例如「我是程序员」会被拆分为「我、是、程序员」

分词此有一个不能忽视的问题,那就是各种新词,网络热词不断出现,分词器并不认识这些词。

        对于新词的补充,大型的NLP系统会不断扩充自己的词库,其使用的技术较为先进和复杂。IK给入门级的使用选手提供了较为简单的扩展支持。

就比如蓝廋香菇这个网络词语,一般不会在ik的原生词典里,ik在对其进行分词的时候,就不知道这是一个“词汇”。

        这时就需要自己补充自己的最新的词语,到ik的词库里面去。首先进入ES根目录中的plugins文件夹下的ik文件夹,进入config目录,创建custom.dic文件,写入蓝瘦香菇。同时打开IKAnalyzer.cfg文件,将新建的custom.dic配置其中,重启ES。

配置文件参考如下:

<?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">custom.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

在进行了配置之后,分词器在“看到”这个词的时候,就会知道这是一个词汇。

好了,这就是本文的全部内容,如有错误,欢迎指正!

参考文章:

1、全文搜索引擎 Elasticsearch 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)

2、看完这篇Elasticsearch还不会,你打我 - 简书 (jianshu.com)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐