IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> elasticsearch -> 正文阅读

[大数据]elasticsearch

restful、lucene简介

RESTful
表述性状态转移(REpresentational State Transfer)
ful代表形容词,RESTful代表满足REST规则。
使用基于RESTful架构的话需要遵循统一的对外接口原则。
接口使用标准的http方法,如GET、POST、PUT等。
个人理解由于elasticsearch就是基于RESTful,所以就可以用这种风格的api在kibana中去处理es中的数据

Lucene
Lucene技术可以做到快速的全文检索
是一个jar包,里面封装了全文检索的引擎、搜索的算法代码。
开发时引入lucene的jar包,通过api开发搜索相关业务。
底层会在磁盘上建立索引库。
Lucene做的就是倒排索引、全文搜索

Elasticsearch
是一个基于Lucene的搜索服务器,封装了许多lucene底层功能,
提供了全文搜索引擎,和基于RESTful api和许多语言的客户端。
也是一种数据库。


elasticsearch核心概念

NRT(Near Realtime):近实时
写入数据时,过几秒才会被搜索到,因为内部需要分词和录入索引。
搜索时,搜索和分析数据需要秒级出结果。

Cluster:集群
包含一个或多个启动着es实例的机器群,通常一台机器起一个es实例。
同一网络下,集群名一样的多个es实例自动组成集群,
自动均衡分片等行为。默认集群名为"elasticsearch"。

Node:节点
每个es实例称为一个节点。

Document:文档
es中最小的数据单元。
一个document就像数据库中一条记录。
通常以json格式显示。
多个document存储于一个索引中。

Index:索引
包含很多有相似结构的文档数据。
可以理解为数据库中的一个表。

Field:字段
就像数据库中的列,定义每个document应该有的字段。

Type:类型
每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,
一个type下的document,都有相同的field。
注意type的概念已经删除

Shard:分片
index数据过大时,将index里面的数据,分为多个shard,分布式的存储在各个服务器上面。

Replica:副本
为了保证数据的安全,我们会将每个index的分片经行备份,存储在另外的机器上。保证少数机器宕机es集群仍可以搜索。


elasticsearch与数据库对比

关系型数据库(比如Mysql)非关系型数据库(Elasticsearch)
数据库Database索引Index
表Table也是索引Index(原为Type)
元组Row文档Document
数据列Column字段Field
约束 Schema映射Mapping

kibana操作elasticsearch

注意kibana中根据配置文件默认了es的ip和port,所以只需要写url中后面的内容

kibana查看es中的索引
GET /_cat/indices?v

创建lab索引(相当于一个数据库)
PUT /lab?pretty

删除lab索引
DELETE /lab

获取lab索引信息
GET /lab?pretty
插入数据
POST /lab/_doc
{
  "name":"smr",
  "age":"22"
}
这时插入的数据会生成随机的id,
如果想自己定义id,做法如下
POST /lab/_doc/1
{
  "name":"smr",
  "age":"22"
}
查看id=1的信息
GET /lab/_doc/1

查看lab索引的所有信息
GET /lab/_search
完全覆盖修改(全量数据更新)
PUT(POST) /lab/_doc/1
{
  "name":"smr",
  "age":"25"
}
局部更新
POST /lab/_update/1
{
  "doc":{
		"age":"30"
  }
}
数据删除
DELETE /lab/_doc/1
查询lab索引中age为30的数据
GET /lab/_search?q=age:30

或者通过请求体查询
GET /lab/_search
{
	"query":{
		"match":{
			"age":22
		}
	}
}

全查询
GET /lab/_search
{
	"query":{
		"match_all":{}
	}
}

分页查询
GET /lab/_search
{
	"query":{
		"match_all":{}
	},
	"from":0,
	"size":1
}
from是当前页起始位置,如果是第一条则是0(页码-1)*每页数据条数
size是每页查询条数

只要age,并且对age排序
GET /lab/_search
{
	"query":{
		"match_all":{}
	},
	"_source":["age"],
	"sort":{
		"age":{
			"order":"desc"
		}
	}
}
多个条件同时成立用must
GET /lab/_search
{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
						"age":23
					}
				},
				{
					"match":{
						"name":"jgc"
					}
				}
			]
		}
	}
}

多个条件成立其中至少一个用should
GET /lab/_search
{
	"query":{
		"bool":{
			"should":[
				{
					"match":{
						"name":"smr"
					}
				},
				{
					"match":{
						"name":"jgc"
					}
				}
			]
		}
	}
}


范围查询
GET /lab/_search
{
	"query":{
		"bool":{
			"filter":{
				"range":{
					"age":{
						"gt": 22
					}
				}
			}
		}
	}
}
es底层基于lucene分词+倒排索引+全文检索
GET /lab/_search
{
	"query":{
		"match":{
			"name":"这里只是一个词"
		}
	}
}

完全匹配+高亮显示
GET /lab/_search
{
	"query":{
		"match_phrase":{
			"name":"jgc"
		}
	},
	"highlight":{
		"fields":{
			"name":{}
		}
	}
}
聚合操作

示例1
GET /lab/_search
{
	"aggs":{	//聚合操作
		"age_group":{	//名称,随意起名
			"terms":{	//分组
				"field":"age"	//分组字段
			}
		}
	},
	"size":0	//不要原始数据
}


示例2
GET /lab/_search
{
	"aggs":{	//聚合操作
		"age_avg":{	//名称,随意起名
			"avg":{	//分组
				"field":"age"	//分组字段
			}
		}
	},
	"size":0	//不要原始数据
}
限制

PUT /lab2

PUT /lab2/_mapping
{
	"properties":{
		"name":{
			"type":"text",	//支持分词
			"index":true	//这个字段可以索引查询
		},
		"sex":{
			"type":"keyword",	//完整匹配
			"index":true	//这个字段可以索引查询
		},
		"tel":{
			"type":"keyword",	//完整匹配
			"index":false	//这个字段可以索引查询
		}
	}
}

GET /lab2/_mapping
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:54:03  更:2021-10-27 12:54:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:40:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码