一、简介
ES(ElasticSearch)是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene
官网: https://www.elastic.co/cn/downloads/
版本选择:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
文档说明:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/index.html
二、下载
(1)创建用户以及密码
因为ElasticSearch只允许普通用户启动
创建可以登陆shell/ssh的普通用户命令
useradd zzqes -s /bin/bash
passwd zzqes
输入2次密码后就可以用对应账户登陆了
(2)切换用户
(3)下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
三、安装
(1)解压
tar -zxvf elasticsearch-6.2.4.tar.gz
(2)修改jvm.options文件
vim /home/zzqes/elasticsearch-6.2.4/config/jvm.options
服务器内存比较小。不修改,报如下错误:
(3)修改elasticsearch.yml文件
vim /home/zzqes/elasticsearch-6.2.4/config/elasticsearch.yml
(4)修改 vi /etc/sysctl.conf
切换root用户修改
vi /etc/sysctl.conf
新增配置内容:
vm.max_map_count=262144
执行命令生效
sysctl -p
(5)修改 limits.conf文件
切换root账号修改
vim /etc/security/limits.conf
修改内容如下:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
四、启动
后台启动
./bin/elasticsearch -d
访问
五、安装nodejs
elasticsearch-head是一个用来浏览、与Elastic Search簇进行交互的web前端展示插件。 elasticsearch-head是一个用来监控Elastic Search状态的客户端插件。
elasticsearch主要有以下主要操作
1)簇浏览,显示簇的拓扑并允许你执行索引(index)和节点层面的操作。
2)查询接口,允许你查询簇并以原始json格式或表格的形式显示检索结果。
3)显示簇状态,有许多快速访问的tabs用来显示簇的状态。
4)支持Restful API接口,包含了许多选项产生感兴趣的结果,包括:
第一,请求方式:get,put,post,delete; json请求数据,节点node, 路径path。
第二,JSON验证器。
第三,定时请求的能力。
第四,用javascript表达式传输结果的能力。
第五,统计一段时间的结果或该段时间结果比对的能力
(1)下载依赖nodejs
wget https://nodejs.org/dist/v9.9.0/node-v9.9.0-linux-x64.tar.xz
(2)解压
mkdir -p /opt/apps
tar -xf node-v9.9.0-linux-x64.tar.xz -C /opt/apps/
(3)配置环境变量
vim /etc/profile
在profile文件最后新增如下内容:
export NODE_HOME=/opt/apps/node-v9.9.0-linux-x64
export PATH=$NODE_HOME/bin:$PATH
说明:
/opt/apps/node-v9.9.0-linux-x64这个是nodejs解压目录
刷新配置
source /etc/profile
(4)查询node版本,同时查看是否安装成功
node -v
六、安装head插件
(1)下载
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
(2)解压
unzip master.zip
(3)移动目录
mv elasticsearch-head-master /opt/apps/
(4)安装
使用淘宝的镜像库进行下载,速度很快 ,不设置淘宝镜像也行:可以使用npm install
npm install -g cnpm --registry=https://registry.npm.taobao.org
进入head插件解压目录,执行安装命令
cnpm install
(5)运行
npm start
访问:此时未连接,需要配置才能连接
(6)修改Gruntfile.js文件配置
vim Gruntfile.js
(7)修改app.js文件
修改IP地址,连接elasticsearch
vim /opt/apps/elasticsearch-head-master/_site/app.js
(8)修改elasticsearch.yml文件
当head插件访问es时,在elasticsearch中要启用CORS,否则浏览器将拒绝跨域。
elasticsearch.yml配置文件新增内容:
http.cors.enabled: true
http.cors.allow-origin: "*"
(9)访问插件
(10)创建索引实例
(11)新增索引
说明
user:相当于关系型数据库中的database
student:相当于关系型数据库中的table
PUT:新增索引
GET:查询
POST:修改
DELETE:删除
(12)查询索引
单条数据查询 http://<ip>:<port>/<索引>/<类型>/<文档id>
查询索引user类型为student下的所有数据
(13)修改索引
(14)删除索引
七、Kibana安装
官网:https://www.elastic.co/cn/downloads/
kibana 插件提供了Marvel监控的UI界面。 kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台。使用kibana可以查询、查看并与存储在elasticsearch索引的数据进行交互操作。使用kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。 kibana使得理解大容量的数据变得非常容易。它非常简单,基于浏览器的接口使我们能够快速的创建和分享显示elasticsearch查询结果实时变化的仪表盘
(1)下载
https://www.elastic.co/guide/en/kibana/current/targz.html
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gz
shasum -a 512 kibana-7.2.0-linux-x86_64.tar.gz
tar -xzf kibana-7.2.0-linux-x86_64.tar.gz
cd kibana-7.2.0-linux-x86_64
(2)进入解压目录,修改kibana.yml配置
详细配置地址:https://www.elastic.co/guide/en/kibana/5.6/settings.html
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://39.97.176.160:9200"
kibana.index: ".kibana"
(3)启动
./bin/kibana
(4)访问
可以看到这里有个红色的错误:“Unable to fetch mapping. Do you have indices matching the pattern?”,这个是因为在elasticsearch中还没有任何有关logstash-*格式相关的数据,所以这里才提示报错,可以暂时忽略
(5)操作
query DSL(domain specified language) 域定义语言,使用Kibana进行复杂查询测试。
es提供了一套api,叫做cat api,可以查看es中各种各样的数据
快速检查集群的健康状况
GET /_cat/health?v
快速查看集群中有哪些索引
GET /_cat/indices?v
新增
PUT /test_index/test_type/1
{"name":"lisi","sex":"女"}
查询
DELETE /test_index #删除索引
查询索引全部
POST /test_index/text_type/_search
{
"query":
{ "match_all": {} }
}
按照字段排序
POST /test_index/text_type/_search
{ "query" :
{ "match" : { "name" : "li" } },
"sort": [ { "price": "desc" } ]
}
分页查询
GET /ecommerce/product/_search
{
"query": { "match_all": {}
},
"from": 1,
"size": 1
}
query filter
搜索商品名称包含yagao,而且售价大于25元的商品
GET /ecommerce/product/_search
{ "query" : { "bool" : { "must" : { "match" : { "name" : "yagao" } },
"filter" : { "range" : { "price" : { "gt" : 25 } } }
} }
}
full-text search(全文检索)
GET /ecommerce/product/_search
{ "query" : { "match" : { "producer" : "yagao producer" } } }
phrase search(短语搜索)
跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回 phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回
GET /ecommerce/product/_search
{ "query" : { "match_phrase" : { "producer" : "yagao producer" } } }
highlight search(高亮搜索结果)
GET /ecommerce/product/_search
{ "query" : { "match" : { "producer" : "producer" } }, "highlight": { "fields" : { "producer" : {} } } }