栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticsearch

elasticsearch

文章目录
  • restful、lucene简介
  • elasticsearch核心概念
  • elasticsearch与数据库对比
  • kibana操作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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号