一、Elasticsearch介绍

1.什么Elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。

#可以做存储,但是不能完全替代数据库
1.ES的一些属性不能修改
2.ES没有用户验证功能

2.全文检索和倒排索引

#全文检索之前必须先建立倒排索引

全文检索和倒排索引
    1.分词
    2.语言处理
    3.排序
    4.计算命中率
    5.再次排序,根据算法给出结果

3.ES功能

1.分布式搜索引擎
2.高亮显示搜索内容
3.全文检索
    相当于数据库:select * from database.table;
4.结构化检索
    相当于数据库:select * from database.table where 条件1;
5.数据分析(ELK)
    相当于数据库:select count(*) from database.table;
6.存储

4.ES特点

1.处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能
2.配置相对简单:elasticsearch全部使用JSON 接口,logstash使用模块配置,kibana的配置文件部分更简单。
3.检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4.集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
5.前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单
6.高性能,分布式
7.不需要会java语言

5.MySQL与ES对比

MySQL

ES

库(database)

索引(index)

表(table)

类型(type)

列(字段)

项(fileter)

真实数据行

文档

二、安装Elasticsearch

1.服务器时间同步

#集群三台机器都执行时间同步
[root@db01 ~]# ntpdate time1.aliyun.com

2.安装java环境

1.上传java的rpm包
[root@db01 ~]# rz jdk-8u181-linux-x64.rpm

2.安装rpm包
[root@db01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm

3.查看java环境版本
[root@db01 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

3.安装ES

1.上传或下载包
[root@db01 ~]# rz elasticsearch-6.6.0.rpm
#或
[root@db01 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm

2.安装ES
[root@db01 ~]# rpm -ivh elasticsearch-6.6.0.rpm 

3.根据提示执行
[root@db01 ~]# systemctl daemon-reload
[root@db01 ~]# systemctl enable elasticsearch.service
[root@db01 ~]# systemctl start elasticsearch.service
 
4.验证启动
[root@db01 ~]# netstat -lntp          
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      16115/java
tcp6       0      0 ::1:9200                :::*                    LISTEN      16115/java
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      16115/java
tcp6       0      0 ::1:9300                :::*                    LISTEN      16115/java

[root@db01 ~]# curl 127.0.0.1:9200
{
  "name" : "q66CE8W",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hiGKtv46TbedMTwKcZm6rg",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

4.ES相关配置文件

[root@db01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml            #ES主配置文件
/etc/elasticsearch/jvm.options                  #虚拟化内存
/etc/elasticsearch/log4j2.properties            #日志配置
/etc/init.d/elasticsearch                       #启动程序
/etc/sysconfig/elasticsearch                    #系统配置
/usr/lib/sysctl.d/elasticsearch.conf            #系统配置
/usr/lib/systemd/system/elasticsearch.service     #system启动程序

5.配置ES

[root@db01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#集群名称,配置单节点时不要开启
#cluster.name: my-application

#当前节点名字
node.name: es01
#ES的数据存放目录
path.data: /server/es/data
#ES的日志存放目录
path.logs: /server/es/logs
#开启内存锁
bootstrap.memory_lock: true
#监听地址
network.host: 10.0.0.51,127.0.0.1
#监听端口
http.port: 9200

#集群配置
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]

#查看配置
[root@db01 ~]# grep "^[a-z]" /etc/elasticsearch/elasticsearch.yml 
node.name: es01
path.data: /server/es/data
path.logs: /server/es/logs
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200

6.根据配置创建目录

#创建目录
[root@db01 ~]# mkdir /server/es/{data,logs} -p

#授权
[root@db01 ~]# chown -R elasticsearch.elasticsearch /server/es

7.重启ES

#重新启动ES
[root@db01 ~]# systemctl restart elasticsearch.service

#启动失败,查看日志
[root@db01 ~]# less /server/es/logs/elasticsearch.log
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

#因为启动程序的内存锁没有开启,需要修改启动脚本
[root@db01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
[Service]
LimitMEMLOCK=infinity       #修改内存限制(去掉此行注释)

#再次重启
[root@db01 ~]# systemctl daemon-reload
[root@db01 ~]# systemctl restart elasticsearch.service

8.验证启动

[root@db01 ~]# netstat -lntp        
tcp6       0      0 10.0.0.51:9200          :::*                    LISTEN      18063/java
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      18063/java
tcp6       0      0 10.0.0.51:9300          :::*                    LISTEN      18063/java
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      18063/java

9.查看页面

#浏览器访问 http://10.0.0.51:9200
{
  #节点名称
  "name" : "es01",
  #集群名称
  "cluster_name" : "elasticsearch",
  #集群的uuid
  "cluster_uuid" : "TqWwplyHQPO7j0hVJalhJQ",
  #版本信息
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

 

三、跟ES进行交互

1.使用curl命令

1)特点

1.使用不方便,命令复杂,容易出错
2.不需要安装任何服务,只需要curl命令

2)使用方式

1.创建索引(创建库)
[root@db01 ~]# curl -XPUT 'localhost:9200/student?pretty'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "student"
}

2.插入数据
[root@db01 ~]# curl -XPUT 'localhost:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "lhd","sex":"man","age":"18","about":"good good study","interests":["chinese","english"]}'
{
  "_index" : "student",
  "_type" : "user",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

3.查看数据
[root@db01 ~]# curl -GET 'localhost:9200/student/user/1?pretty'
{
  "_index" : "student",
  "_type" : "user",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "lhd",
    "sex" : "man",
    "age" : "18",
    "about" : "good good study",
    "interests" : [
      "chinese",
      "english"
    ]
  }
}

2.使用ES-head插件的方式

插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。

安装Elasticsearch的head插件时,要安装npm,npm的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。

在Elasticsearch 5.x版本以后不再支持直接安装head插件,而是需要通过启动一个服务方式。

1)特点

1.查看数据方便,操作简单
2.需要安装nodejs,安装复杂

2)安装方法一

#安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装)
[root@elkstack01 ~]# yum install -y nodejs openssl
#从GitHub上克隆代码到本地
[root@redis01 ~]# git clone git://github.com/mobz/elasticsearch-head.git
#克隆完成后,进入elasticsearch插件目录
[root@redis01 ~]# cd elasticsearch-head/
#清除缓存
[root@redis01 elasticsearch-head]# npm cache clean -f
#使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
[root@redis01 elasticsearch-head]# npm install -g n
#安装最新版本n模块
[root@redis01 elasticsearch-head]# n stable
#生成grunt
[root@redis01 elasticsearch-head]# npm install grunt -save
#确认生成grunt文件
[root@redis01 elasticsearch-head]# ll node_modules/grunt
#执行安装grunt
[root@redis01 elasticsearch-head]# npm install
#后台启动head插件(切记,必须在插件目录下执行启动命令)
[root@redis01 elasticsearch-head]# npm run start &
#验证端口是否启动成功
[root@redis01 elasticsearch-head]# netstat -lntup
tcp        0      0 0.0.0.0:9100                0.0.0.0:*                   LISTEN      11293/grunt
#启动成功后,修改elasticsearch配置文件
[root@redis01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
#重启elasticsearch
[root@elkstack01 elasticsearch-head]# systemctl restart elasticsearch

3)安装方式二

1.在电脑上解压es-head-0.1.4_0.crx.zip到一个目录(或者直接将压缩包拖到浏览器)
2.谷歌浏览器右上角红色箭头或者三个杠或者三个点
3.点击更多工具下面的扩展程序
4.右上角打开开发者模式
5.加载刚刚解压的目录
6.加载后浏览器网址框旁边会出现一个放大镜
7.点击放大镜进入ES插件页面
8.修改ES地址连接