ElasticSearch全文检索(1)
一、ElasticSearch介绍
1、什么是ElasticSearch?
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个基于RESTfulweb接口的分布式全文搜索引擎
简单来说就是基于lucene的全文检索服务器,对外提供restful接口
学习之前我们要清楚一件事,有些公司会使用solr,这个时候es和solr我们选择哪一个?
①如果你公司现在用的solr可以满足需求就不要换了。
②如果你公司准备进行全文检索项目的开发,建议优先考虑elasticsearch,因为像Github这样大规模的搜索都在用它。
2.ElasticSearch的索引结构
ElasticSearch有两种索引
①正排索引,为了方便理解直接上图
正排索引:原始文档传入数据到index索引库后–>documents文档–>分词列表(分词列表中的内容)
我们也可以用字典去理解–正排索引:查字典从第一页开始找,直到找到位置(文档----->关键字)
②倒排索引,直接上图
倒排索引:原始文档传入数据到index索引库后—>关键字(分词列表中的内容)—>documents文档
也可以通过字典去理解–倒排索引:查字典时通过目录查询(关键字---->文档)
倒排索引由三部分组成组成(进阶):
1、将搜索的文档最终以Document方式存储起来。
2、将要搜索的文档内容分词,所有不重复的词组成分词列表。
3、每个分词和docment都有关联。
我们需要明白分词列表的特点:①不重复 ②“的 得 地”语气词不参加分词 ③搜索的field不参加分词
👆上面我们介绍完了Elasticsearch和他的索引结构,那么我们要如何使用呢?
推荐使用Elasticsearch因为他提供 RESTful Api接口进行索引、搜索,并且支持多种客户端。
二,ElasticSearch的安装
安装之前环境需求
1、jdk必须是jdk1.8.0_131以上版本。
2、ElasticSearch 需要至少4096 的线程池和 262144字节以上空间的虚拟内存才能正常启动,所以需要为虚拟机分配至少1.5G以上的内存
3、从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动
4、Elasticsearch的插件要求至少centos的内核要3.5以上版本
下载
ElasticSearch官网:https://www.elastic.co/cn/
下载好后使用xftp等一类软件放入虚拟机/usr/upload的文件夹中
设置虚拟机内存
创建用户
从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户。
1.创建elk 用户组
groupadd elk
2.创建用户admin
useradd admin
passwd admin
3.将admin用户添加到elk组
usermod -G elk admin
5.为用户分配权限
#chown将指定文件的拥有者改为指定的用户或组 -R处理指定目录以及其子目录下的所有文件
chown -R admin:elk /usr/upload
chown -R admin:elk /usr/local
切换用户:
su admin
安装
tar -zxvf elasticsearch-6.2.3.tar.gz -C /usr/local
解压好后有一个ES文件夹,里面的目录结构有以下几个
bin 目录:可执行文件包
config 目录:配置相关目录
lib 目录:ES 需要依赖的 jar 包,ES 自开发的 jar 包
logs 目录:日志文件相关目录
modules 目录:功能模块的存放目录,如aggs、reindex、geoip、xpack、eval
plugins 目录:插件目录包,三方插件或自主开发插件
data 目录:在 ES 启动后,会自动创建的目录,内部保存 ES 运行过程中需要保存的数据。
配置文件
ES安装目录config中配置文件如下:
elasticsearch.yml:用于配置Elasticsearch运行参数
jvm.options:用于配置Elasticsearch JVM设置
log4j2.properties:用于配置Elasticsearch日志
elasticsearch.yml
根据项目修改配置文件
cluster.name:
配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。
node.name:
节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。
path.data:
设置索引数据的存储路径,默认是es_home下的data文件夹,可以设置多个存储路径,用逗号隔开。
path.logs:
设置日志文件的存储路径,默认是es_home下的logs文件夹
network.host:
设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。
http.port: 9200
设置对外服务的http端口,默认为9200。
transport.tcp.port: 9300
集群结点之间通信端口
discovery.zen.ping.unicast.hosts:[“host1:port”, “host2:port”, “…”]
设置集群中master节点的初始列表。
discovery.zen.ping.timeout: 3s
设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。
http.cors.enabled:
是否支持跨域,默认为false
http.cors.allow-origin:
当设置允许跨域,默认为*,表示支持所有域名
—>以下为示例<—
cluster.name:llek_op
node.name: llek_op_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
path.data: /usr/local/elasticsearch-6.2.3/data
path.logs: /usr/local/elasticsearch-6.2.3/logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
jvm.options
设置最小及最大的JVM堆内存大小:
在jvm.options中设置 -Xms和-Xmx:
1) 两个值设置为相等
2) 将Xmx
设置为不超过物理内存的一半。
默认内存占用太多了,我们调小一些:
-Xms512m
-Xmx512m
log4j2.properties
日志文件设置,ES使用log4j,注意日志级别的配置,一般无特殊需求无需更改。
启动ES
启动和关闭
1、启动
./elasticsearch --》一般使用这个就行,简单不易出错
#或
./elasticsearch -d
启动成功后如下👇
2、关闭
查看状态 ps-ef|grep elasticsearch
kill -9 pid
第一次使用时会出现以下问题,可以根据索引一步一步解决
使用前我们可以通过命令来查看内核版本 uname -srm,如果出现内核问题可以看下面这个步骤
–>解决内核问题
示例中使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。禁用这个插件即可。
修改elasticsearch.yml文件,在最下面添加如下配置
bootstrap.system_call_filter: false
解决文件创建权限问题
[1]: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
Linux 默认来说,一般限制应用最多创建的文件是 4096个。但是 ES 至少需要 65536 的文件创建权限。我们用的是admin用户,而不是root,所以文件权限不足。
使用root用户修改配置文件:
vim /etc/security/limits.conf
追加下面的内容:
* soft nofile 65536
* hard nofile 65536
解决线程开启限制问题
[2]: max number of threads [1024] for user [admin] is too low, increase to at least [4096]
默认的 Linux 限制 root 用户开启的进程可以开启任意数量的线程,其他用户开启的进程可以开启1024 个线程。必须修改限制数为4096 。因为 ES 至少需要 4096 的线程池预备。
如果虚拟机的内存是 1G,最多只能开启 3000 个线程数。至少为虚拟机分配 1.5G 以上的内存。
使用root用户修改配置:
vim /etc/security/limits.d/90-nproc.conf
修改下面的内容:
* soft nproc 1024
改为:
* soft nproc 4096
解决虚拟内存问题
[3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
ES 需要开辟一个 262144字节以上空间的虚拟内存。Linux 默认不允许任何用户和应用直接开辟虚拟内存。
vim /etc/sysctl.conf
追加下面内容:
vm.max_map_count=655360 #限制一个进程可以拥有的VMA(虚拟内存区域)的数量
然后执行命令,让sysctl.conf配置生效:
sysctl -p
安装Kibana
什么是Kibana
Kibana是ES提供的一个基于Node.js的管理控制台, 可以很容易实现高级的数据分析和可视化,以图标的形式展现出来。
kibana可以用来编辑请求语句的,方便学习操作es的语法。有时在进行编写程序,写到查询语句时,往往我会使用kibana进行书写,然后再粘贴到程序中。(不容易出错)
下载
ElasticSearch官网:https://www.elastic.co/cn/
安装
在window中安装Kibana很方便,解压即安装
修改配置
修改config/kibana.yml配置:
server.port: 5601
server.host: "0.0.0.0" #允许来自远程用户的连接
elasticsearch.url: http://192.168.204.132:9200 #Elasticsearch实例的URL
启动
./bin/kibana
测试
浏览器访问:http://127.0.0.1:5601
使用时点击Dev Tools 开始使用即可
4.安装head
4.1.什么是head
head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映射、创建索引等。从ES6.0开始,head插件支持使得node.js运行。
4.2.安装
1、下载head
下载地址:https://github.com/mobz/elasticsearch-head
2、运行
npm run start
4.3.测试
浏览器访问:http://127.0.0.1:9100/
注意使用时,把红框内地址修改成你修改后的地址,否则无法连接
链接成功后如下
ES快速入门
ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用kibana来测试,目的是对ES的使用方法及流程有个初步的认识。
1、index管理
1)创建index
PUT /javayes
{
"settings":{
"number_of_shards":2 #主分片的数量,提高处理能力
"number_of_replicas":0 #备份分配的数量,提高可用性
}
}
注意:一台服务器时,备份分配的数量必须设置为0,因为主备在同一台服务器上没有意义
2)修改index
PUT /javayes/_setting
{
"number_of_replicas":0
}
注意:index一旦创建,主分片数量不可修改,因为:GET时--->hash(id)%number_of_shards
##### 3)删除index
DELETE /java2203
2、mapping管理
1)创建mapping
POST /javayes/course/_mapping
{
"properties":{
"name":{
"type":"text"
}
}
}
3、document管理
1)新增document
POST /javayes/course/1
{
"name":".net从入门到放弃",
"description":".net程序员谁都不服",
"studymodel":"201003"
}
2)修改document
put /javayes/course/1
{
"name":"php从入门到放弃",
"description":"php程序员谁都不服",
"studymodel":"201003"
}
3)查询document
GET /javayes/course/1
4)删除document
DELETE /javayes/course/1
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggfjcj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13