ElasticSearch 安装

声明 JDK1.8,最低要求!ElasticSearch客户端,界面工具,ik分词器版本必须一致!

Java开发,ElasticSearch 的版本和我们之后对应的JAVA的核心Jar包,版本对应!JDK环境是正常!

下载:https://www.elastic.co/cn/downloads/elasticsearch

华为镜像下载地址:

ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D

bin 启动文件
config 配置文件
	log4j2 日志配置文件
		jvm.options java 虚拟机相关的配置
		elasticsearch.yml  elasticsearch 的配置文件! 默认端口:9200! 跨域!
lib 相关jar 
logs   日志!
modules 功能模块
plgins  插件 ik 分词器

下载使用华为镜像下载

kibana管理es索引_kibana

选择windows 10版本 下载

kibana管理es索引_zookeeper_02

下载完成,直接解压启动

kibana管理es索引_kibana_03

选择bat 脚本启动

kibana管理es索引_zookeeper_04

访问 默认端口 http://localhost:9200

kibana管理es索引_kibana_05

了解 ELK

ELK 是 ElasticSearch 、Logstash、kibana 三大开源框架首字母大写简称,市面上也被称为Elastic Stack 。其中 ElasticSearch是一个基于Lucene,分布式,通过 Restful 方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用 ElasticSearch 作为底层支持框架,可见ElasticSearch 提供 的搜索能力确实强大,失眠上很多时候我们简称ElasticSearch为es。 Logstash 是ELK 的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticearch/kafka等)。Kibana可以将 elasticsearch 的数据通过友好的页面展示出来,提供实时分析的功能。

市面上很多开发只要提到ELK 能够一致说出它是一个日志分析架构技术栈总称,但实际ElK不仅仅适用于日志分析,它还可以支持其他任何数据分析和收集的场景,日志分析和手机只是更具有代表性。并非唯一性。

kibana管理es索引_运维_06

head 插件安装

下载: https://github.com/mobz/elasticsearch-head

kibana管理es索引_kibana管理es索引_07

运行说明

kibana管理es索引_kibana_08

解压

kibana管理es索引_elasticsearch_09

运行,执行npm install 更新 (需要安装 node.js)

kibana管理es索引_kibana_10

执行 npm run start

kibana管理es索引_kibana管理es索引_11


kibana管理es索引_zookeeper_12

出现head 请求跨域以下情况,修改 elasticsearch.yml 配置文件

kibana管理es索引_kibana_13

http.cors.enabled: true
http.cors.allow-origin: "*"

kibana管理es索引_kibana管理es索引_14

因为es默认不支持跨域,我们修改让他支持以下就好了

Ik分词器插件

什么是Ik 分词器?

分词:即把一段中文或者别的划分为一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如 我爱JAVA 会被分为 “我”,“爱”,“JAVA”,这显然是不符合要求的,所以我们需要安装中文分词器IK来解决问题

如果要使用中文,建议使用 ik 分词器。

IK 提供了两个分词算法: IK_smart 和 IK_max_word ,其中 ik_smart 为最少切分,ik_max_word 为最细粒度划分!

安装

1,下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

2,下载完成后,放到 elasticsearch /plugins 该目录下

kibana管理es索引_elasticsearch_15


kibana管理es索引_kibana管理es索引_16

3,重启 es

kibana 安装

安装 kibana

kibana是一个针对 Elastaicsearch 的开源分析及可视化平台,用来搜索,查看交互存储 在Elasticsearch 索引中的数据。使用Kibana,

可以通过各种图标进行高级数据分析及展示。kibana 让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板实时显示 Elasticsearch 查询动态。设置Kibana 非常简单,无需编码或者额外的基础架构,几分钟内疚可以完成 kibana安装并启动Elasticsearch 索引监测。

下载地址:https://www.elastic.co/cn/downloads/past-releases#kibana

下载解压 启动 就可以了

提示:需要安装node.js 才能启动

汉化

找到该路径汉化文件:D:\java\ElasticSearch\kibana-7.9.3-windows-x86_64\x-pack\plugins\translations\translations

kibana管理es索引_kibana_17

1,配置config:D:\java\ElasticSearch\kibana-7.9.3-windows-x86_64\config

kibana管理es索引_运维_18

2,打开:kibana.yml

kibana管理es索引_elasticsearch_19

3,将115行 改为

kibana管理es索引_运维_20

启动

kibana管理es索引_zookeeper_21

测试

kibana管理es索引_kibana管理es索引_22

使用 ik_smart 和 ik_max_word 测试

kibana管理es索引_elasticsearch_23


kibana管理es索引_zookeeper_24

自定义 扩展字典;该路径下D:\java\ElasticSearch\elasticsearch-7.9.3\plugins\elasticsearch-analysis-ik-7.9.3\config

kibana管理es索引_kibana_25

以后的话,我们需要自己配置 分词就在自己定义的 dic文件中进行配置即可~

Rest 风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

基本Rest命令说明:

method

url地址

描述

PUT

localhost:9200/索引名称/类型名称/文档id

创建文档(指定文档id)

POST

localhost:9200/索引名称/类型名称

创建文档(随机文档id)

POST

localhost:9200/索引名称/类型名称/文档id/_update

修改文档

DELETE

localhost:9200/索引名称/类型名称/文档id

删除文档

GET

localhost:9200/索引名称/类型名称/文档id

查询文档通过文档id

POST

localhost:9200/索引名称/类型名称/_search

查询所有数据

创建一个索引

PUT /索引名/类型名称/文档id
{请求体}

kibana管理es索引_kibana_26

创建成功

kibana管理es索引_zookeeper_27

那么name 这个字段 用不用指定类型呢。 关系型数据库是需要指定类型的

  • 字符串类型 text,keyword
  • 数值类型 long,integer,short ,byte,double,float,half,float,scaled float
  • 日期类型 date
  • 布尔类型 boolean
  • 二进制类型 binary
  • 等等

指定类型创建规则, (这里其实相当于 mysql 建表)

PUT /test2
{
  "mappings": {
    "properties": {
      "name":{
            "type":"text"
        },
       "age":{
            "type":"long" 
        }
      }
    }
     
  }
}

kibana管理es索引_运维_28


kibana管理es索引_elasticsearch_29

GET test2 获得索引信息

kibana管理es索引_kibana管理es索引_30

观察 test1 索引 没有 指定类型, es有默认类型

GET test1

kibana管理es索引_kibana管理es索引_31

修改提交还是使用 PUT即可。然后覆盖

修改文档

POST /test1/type1/1/_update
{
  "doc":{
     "name": "李四"
  }
}

kibana管理es索引_elasticsearch_32

修改成功

kibana管理es索引_运维_33

删除索引

DELETE test2

kibana管理es索引_kibana_34

索引test2 已经不存在

kibana管理es索引_kibana_35

复杂条件查询


查询根据 姓名 条件,年龄排序, 分页

GET test1/type1/_search
{
  #查询匹配 名字为张三的
  "query":{
  		"match":{
  		   "name":"张三"
  		}
  },
  #根据年龄排序
  "sort":[{
  		"age":{
  			"order":"asc"
  		}
  }],
  #分页 从0条开始 返回10条数据 
  "from":0,
  "size":10
  
}

多条件精确查询,根据 bool 关键字 进行多条件关键字查询

GET test1/type1/_search
{
	"query":{
        "bool":{
        	"must":[
        		{
                    "match":{
                        "name":"java"
                    }
                },
                {
                     "match":{
                        "age":"3"
                 	  }
                 }
        	]
        }
     }

}

must : 相当于 sql 里面的 and

should :相当于 sql 里面的 or

must_not : 相当于 sql 里面的 not

查询条件过滤,过滤年龄大于5岁的

GET test1/type1/_search
{
	"query":{
        "bool":{
        	"must":[
        		{
                    "match":{
                        "name":"java"
                    }
                }
        	],
        	"filter":{
        		"range":{
        			"age":{
        				"gt":5
        			}
        		}
        	}
        	
        }
     }
}

查询条件过滤,过滤年龄小于5岁的

GET test1/type1/_search
{
	"query":{
        "bool":{
        	"must":[
        		{
                    "match":{
                        "name":"java"
                    }
                }
        	],
        	"filter":{
        		"range":{
        			"age":{
        				"lt":5
        			}
        		}
        	}
        	
        }
     }
}
  • gt 大于
  • gte 大于等于
  • lt 小于
  • lte 小于等于

多个条件过滤

GET test1/type1/_search
{
	"query":{
        "bool":{
        	"must":[
        		{
                    "match":{
                        "name":"java"
                    }
                }
        	],
        	"filter":{
        		"range":{
        			"age":{
        			    "gte":25
        				"lte30
        			}
        		}
        	}
        	
        }
     }
}

匹配多个条件

GET test1/type1/_search
{
	"query":{
        "match":{
        	"name":"java  男“
        }
     }
}

精确查询

term 查询是直接通过 倒排索引指定的词条进程精确查找

关于分词:

  • term ,直接查询精确的
  • match,会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询)
  • text,会被分词器解析
  • keyword,不会被分词器解析

高亮查询

GET test1/type1/ _search
{
	"query":{
		"match":{
			"name":“java”
		}
	},
	"highlight":{
	    #自定义高亮颜色
		"pre_tags":"<p class='key' style='color:red'>",
		"post_tags":"</p>",
		"fields":{
			“name":{}
		}
	}
}