Elastic Stack系列--ElasticSearch基础

本文是ElasticStack系列教程的一部分,主要介绍Elasticsearch的基础知识,包括安装、基本概念如索引、文档、映射,以及Restful API的使用,如创建、删除、更新和搜索数据。此外,还讨论了Elasticsearch的分词和过滤查询,以及分页、映射等核心内容。
摘要由CSDN通过智能技术生成

1.Elastic Stack简介

ELK实际上是三款软件的简称,分别是ElasticSearch,Logstash,Kibana组成.在发展的过程中,又有了新成员Beats的加入,所以就形成了Elastic Stack.所以说,ELK是旧的称呼,Elastic Stack是新的名字.
在这里插入图片描述
在这里插入图片描述

  • ElasticSearch:ELasticSearch基于Java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片.索引自动分片,索引副本机制,Restful风格接口,多数据源,自动搜索负载等;
  • Logstash:Logstash是基于Java的,是一个开源的用于收集,分析和存储日志的工具;
  • Kibana:Kinbana基于Node.js,也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供的日志分析友好的Web界面,可以汇总,分析和搜索重要数据日志.
  • Beats:Beats是elastic公司开源的一款采集系统监控数据的代理agent,是在被监控服务器上以客户端形成运行的数据收集器的统称,可以直接把数据发送给ElasticSearch或者通过Logstash发送给ElasticSearch,然后进行后续的数据分析活动.Beats由如下组成:
    • Packetbeat:是一个网络数据包分析器,用于监控,收集网络流量信息,Packetbeat嗅探服务器之间的流量,解析应用层协议,并关联到消息的处理,其支持ICMP(v4 and v6),DNS,HTTP,MySQL,PostgreSQL,Redis.MongoDB,Memcache等协议;
    • Filebeat:用于监控,收集服务器日志文件,其已取代Logstash forwarder;
    • Metribeat:可定期获取外部系统的监控指标信息,其可以监控,收集Apache,HAProxy,MongoDB,MySQL,Nginx,PostgreSQL,Redis,System,Zookeeper等服务;
    • Winlogbeat:用于监控,收集Windows系统的日志信息;

2.ElasticSearch

2.1.简介

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

我们建立一个网站或应用程序,并要添加搜索,但是想要完成搜索工作的创建是非常困难的.我们希望搜搜索决方案要运行速度快,我们希望能有一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案.因此我们利用ElasticSearch来解决所有这些问题及可能出现的更多其它问题.

2.2.安装

ElasticSearch的发展是非常快速的,所以在ES5.0之前,ELK的各个版本都不统一,出现了版本号混乱的状态.所以从5.0开始,所有Elastic Stack中的项目全部统一版本号,目前我们使用6.5.4;

2.2.1.非docker安装

2.2.2.docker安装

docker pull elasticsearch:6.5.4

docker create  --name elasticsearch --net host -e "discovery.type=single-node" -e "network.host=172.16.124.131" elasticsearch:6.5.4

docker start elasticsearch

docker logs elasticsearch

需要说明的是:此docker安装是开发模式,并没有配置目录挂载等内容,集群环境后续再使用

2.2.3.elastic-search-head安装

docker pull mobz/elasticsearch-head:5

docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

docker start elasticsearch-head

注意:由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置,如下所示,通过chrome插件安装的方式不存在该问题.

vim elasticsearch.yml

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

2.3.基本概念

  • 索引
    • 索引(index)是ElasticSearch对逻辑数据的逻辑存储,所以它可以分为更小的部分;
    • 可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值;
    • ElasticSearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),每个分片有多个副本(replica);
  • 文档
    • 存储在ElasticSearch中的主要实体叫文档(document),用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录;
    • ElasticSearch和MongoDB中的文档类似,都可以有不同的结构,但ElasticSearch的文档中,相同字段必须有相同的类型;
    • 文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫做多值字段;
    • 每个字段的类型,可以是文本,数值,日期等,字段类型也可以是复杂类型,一个字段包含其他子文档或者数组;
  • 映射
    • 所有文档写进索引之前都会先进行分析,如何将输入的文本风分割成词条,哪些词条又会被过滤,这种行为叫做映射(mapping),一般由用户自己定义规则;
  • 文档类型
    • 在ElasticSearch中,一个索引对象可以存储很多不同用途的对象,例如,一个博客应用可以保存文章和评论;
    • 不同的文档类型不能为相同的属性设置不同的类型,例如,在同一索引中的所有文档类型中,一个叫title的字段必须具有相同的类型;

2.4.Restful API

在ElasticSearch中,提供了功能丰富的Restful API的操作,包括基本的CRUD,创建索引,删除索引等操作;

2.4.1.创建和删除非结构化索引

在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在ElasticSearch中提供了非结构化的索引,就是不需要创建索引结构,即可写入数据到索引中,实际上在ElasticSearch底层会进行结构化操作,此操作对用户是透明的.

创建索引

PUT http://172.16.124.131:9200/haoke

{
   
	"settings":{
   
		"index":{
   
			"number_of_shards":"2",
			"number_of_replicas":"0"
		}
	}
}

删除索引

DELETE http://172.16.124.131:9200/haoke

{
   
	"acknowledged":true
}

2.4.2.插入数据

2.4.2.1.指定id

POST http://172.16.124.131:9200/(索引)/(类型)/(id)

POST http://172.16.124.131:9200/haoke/user/1001
#请求数据
{
   
	"id":1001,
	"name":"张三",
	"age":20,
	"sex":"男"
}
#响应数据
{
   
    "_index": "haoke",
    "_type": "user",
    "_id": "1001",
    "_version": 1,
    "result": "created",
    "_shards": {
   
        "total": 1,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}
2.4.2.2.自动生成id

同样我们也可以不指定id插入数据,我们可以看出它已经自动生成id了.

POST http://172.16.124.131:9200/haoke/user
#请求数据
{
   
	"id":1002,
	"name":"李四",
	"age":20,
	"sex":"男"
}

在这里插入图片描述
注意:1.URL后面的id是文档id,请求数据中的id是业务id,这两个id是完全不一样的.

2.非结构化的索引,不需要事先创建,直接插入数据默认创建索引.

2.4.3.更新数据

2.4.3.1.覆盖

在ElasticSearch中,文档数据是不能被修改的,但是可以通过覆盖的方式进行更新;

PUT http://172.16.124.131:9200/haoke/user/1001
{
   
	"id":1002,
	"name":"王五",
	"age":20,
	"sex":"男"
}

在这里插入图片描述
我们可以看到,数据已经更新了,并且版本进行了+1.

2.4.3.2.局部更新

问题来了,可以局部进行更新吗?答案是可以的,之前我们讲的是文档数据不能进行更新,其实是这样的:

  1. 第一步:从旧文档中检索出JSON;
  2. 第二步:修改它;
  3. 第三步:删除旧文档;
  4. 第四步:索引新文档;
POST http://172.16.124.131:9200/haoke/user/1001/_update
#请求数据
{
   
	"doc":{
   
		"name":"赵柳"
	}
}
#响应数据
{
   
    "_index": "haoke",
    "_type": "user",
    "_id": "1001",
    "_version": 3,
    "result": "updated",
    "_shards": {
   
        "total": 1,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 2,
    "_primary_term": 1
}

2.4.4.删除数据

DELETE http://172.16.124.131:9200/haoke/user/1001

注意:如果删除一条不存在的数据,会响应404,删除一个文档也不会立即从磁盘上移除,它只是被标记成已删除,ElasticSearch将会在你之后添加更多索引的时候才会在后台进行删除内容的清理.

2.4.5.搜索数据

2.4.5.1.根据id搜索数据
GET http://172.16.124.131:9200/haoke/user/1001

#响应数据
{
   
	"_index": "haoke",
	"_type": "user",
	"_id": "1001",
	"_version": 1,
	"found": true,
	"_source": {
   
		"id": 1001,
		"name": "张三",
		"age": 20,
		"sex": "男"
	}
}
2.4.5.2.搜索全部数据
GET http://172.16.124.131:9200/haoke/user/_search

#响应数据(默认返回10条数据)
{
   
	"took": 7,
	"timed_out": false,
	"_shards": {
   
		"total": 5,
		"successful": 5,
		"skipped": 0,
		"failed": 0
	},
	"hits": {
   
		"total": 2,
		"max_score": 1.0,
		"hits": [
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "1001",
				"_score": 1.0,
				"_source": {
   
					"id": 1001,
					"name": "张三",
					"age": 20,
					"sex": "男"
				}
			},
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "xl2Ij3ABhf2JFmKcKHq2",
				"_score": 1.0,
				"_source": {
   
					"id": 1002,
					"name": "李四",
					"age": 20,
					"sex": "男"
				}
			}
		]
	}
}
2.4.5.3.关键字搜索数据
#查询姓名是张三的用户
GET http://172.16.124.131:9200/haoke/user/_search?q=name:张三
#响应数据
{
   
	"took": 29,
	"timed_out": false,
	"_shards": {
   
		"total": 5,
		"successful": 5,
		"skipped": 0,
		"failed": 0
	},
	"hits": {
   
		"total": 1,
		"max_score": 0.5753642,
		"hits": [
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "1001",
				"_score": 0.5753642,
				"_source": {
   
					"id": 1001,
					"name": "张三",
					"age": 20,
					"sex": "男"
				}
			}
		]
	}
}

2.4.6.DSL搜索

ElasticSearch提供丰富且灵活的查询语言叫做DSL查询,它允许你构建更加复杂,强大的查询.**DSL(Domain Specific Language特定领域语言)**以JSON请求体的形式出现.

1.查询年龄为20岁的用户

POST http://172.16.124.131:9200/haoke/user/_search
#请求体
{
   
	"query":{
   
		"match":{
   
			"age":20
		}
	}
}
#响应体
{
   
	"took": 4,
	"timed_out": false,
	"_shards": {
   
		"total": 5,
		"successful": 5,
		"skipped": 0,
		"failed": 0
	},
	"hits": {
   
		"total": 2,
		"max_score": 1.0,
		"hits": [
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "1001",
				"_score": 1.0,
				"_source": {
   
					"id": 1001,
					"name": "张三",
					"age": 20,
					"sex": "男"
				}
			},
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "xl2Ij3ABhf2JFmKcKHq2",
				"_score": 1.0,
				"_source": {
   
					"id": 1002,
					"name": "李四",
					"age": 20,
					"sex": "男"
				}
			}
		]
	}
}

2.查询年龄大于15岁的男性用户

POST http://172.16.124.131:9200/haoke/user/_search
#请求体
{
   
	"query":{
   
		"bool":{
   
			"filter":{
   
				"range":{
   
					"age":{
   
						"gt":15
					}
				}
			},
			"must":{
   
				"match":{
   
					"sex":"男"
				}
			}
		}
	}
}
#响应体
{
   
	"took": 28,
	"timed_out": false,
	"_shards": {
   
		"total": 5,
		"successful": 5,
		"skipped": 0,
		"failed": 0
	},
	"hits": {
   
		"total": 3,
		"max_score": 0.6931472,
		"hits": [
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "1002",
				"_score": 0.6931472,
				"_source": {
   
					"id": 1001,
					"name": "李四",
					"age": 22,
					"sex": "男"
				}
			},
			{
   
				"_index": "haoke",
				"_type": "user",
				"_id": "1001",
				"_score": 0.2876821,
				"_source": {
   
					"id": 1001,
					"name": "张三",
					"age": 20,
					"sex": "男"
				}
			},
			{
   
				"_index": "haoke",
				"_type": 
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。该课程从ELK组件中的两大组件和常用的应用日志收集进行剖析讲解。(1)ElasticSearch:从单台的安装到集群的搭建、从基础的入门使用到高级的搜索和聚合都进行了较好的阐述。(2) Logstash:通过收集apache日志,使用grok插件和geoip插件先让学习人员对整体框架做到了了解于胸。然后再深入的对LogStash重要的知识点进行了剖析。(3)应用日志收集:对常见的Apache、Nginx、MySQL、Syslog进行日志收集和分析。虽说没有讲解太多,但是我想应该能做到让大家对应用日志收集了解的更加深入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值