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

ElasticSearch基本操作

ElasticSearch基本操作

1 ES的结构

1.1 索引Index,分片和备份

索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个,把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可(索引的名字必须是全部小写,不能以下划线开头,不能包含逗号)

ES的服务中,可以创建多个索引。

每一个索引默认被分成5片存储。

每一个分片都会存在至少一个备份分片。

备份分片默认不会帮助检索数据,当ES检索压力特别大的时候,备份分片才会帮助检索数据。

备份的分片必须放在不同的服务器中(不要把所有的鸡蛋都放在同一个篮子的道理)。

索引分片备份

 

1.2 类型 Type

类型用于区分同一个索引下不同的数据类型,相当于关系型数据库中的表。在Elasticsearch中,我们使用相同类型(type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。

es 6.0 开始不推荐一个index下多个type的模式,并且会在 7.0 中完全移除。在 6.0 的index下是无法创建多个type的

Ps:根据版本不同,类型的创建也不同。

类型

 

1.3 文档 Doc

文档是ElasticSearch中存储的实体,类比关系型数据库,每个文档相当于数据库表中的一行数据。 在Elasticsearch中,文档(document)这个术语有着特殊含义。它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中)。

一个类型下,可以有多个文档。这个文档就类似于MySQL表中的多行数据。

文档

 

1.4 属性 Field

一个文档中,可以包含多个属性。类似于MySQL表中的一行数据存在多个列。

属性

 

2 操作ES的RESTful语法

GET请求:

http://ip:port/index:查询索引信息

http://ip:port/index/type/doc_id:查询指定的文档信息

POST请求:

http://ip:port/index/type/_search:搜索文档,可以在请求体中提交json字符串来代表查询条件

http://ip:port/index/type/doc_id/_update:更新文档,请求体中提交json字符串代表修改的具体信息

PUT请求:

http://ip:port/index:放置或者说创建一个索引,需要在请求体中指定索引的信息,类型,结构

http://ip:port/index/type/_mappings:放置或者说创建索引时,指定索引文档存储的属性的信息

DELETE请求:

http://ip:port/index:删除索引

http://ip:port/index/type/doc_id:删除对应id的文档

RESTful_百度百科

3 索引的操作

3.1 创建一个索引

语法如下

 # 创建一个索引
 PUT /person
 {
   "settings": {
     "number_of_shards": 5,
     "number_of_replicas": 1
   }
 }

3.2 查看索引信息

语法如下

 # 查看索引信息
 GET /person

 health:健康的情况,正常的情况下es健康状态是绿色。  status:状态  Primaries:分片数量  Replicas:备份数量  Docs count:文档数量

这里新建的索引健康状态是黄色是因为es默认会把备份的分片放到其他服务器上面,但是目前我们是单机版找不到其他的es服务器所以是黄色而已。

3.3 删除索引

语法如下

 # 删除索引
 DELETE /person

4 ES中Field可以指定的类型

字符串类型:

text:一般被用于全文检索,将当前Field进行分词。

keyword:搜索关键字,当前Field不会被分词。

数值类型:

long:取值范围为-9223372036854774808~922337203685477480(-2的63次方到2的63次方-1),占用8个字节

integer:取值范围为-2147483648~2147483647(-2的31次方到2的31次方-1),占用4个字节

short:取值范围为-32768~32767(-2的15次方到2的15次方-1),占用2个字节

byte:取值范围为-128~127(-2的7次方到2的7次方-1),占用1个字节

double:1.797693e+308~ 4.9000000e-324 (e+308表示是乘以10的308次方,e-324表示乘以10的负324次方)占用8个字节

float:3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,e-45表示乘以10的负45次方),占用4个字节

half_float:精度比float小一半。

scaled_float:根据一个long和scaled来表达一个浮点型,long-345,scaled-100 -> 3.45

时间类型:

date类型,针对时间类型指定具体的格式

布尔类型:

boolean类型,表达true和false

二进制类型:

binary类型暂时支持base64 encode string

范围类型:

long_range:赋值时,无需指定具体的内容,只需要存储一个范围即可,指定gt,lt,gte,lte

integer_range:同上

double_range:同上

float_range:同上

date_range:同上

ip_range:同上

经纬度类型:

geo_point:用来存储经纬度的

ip类型:

ip:可以存储IPV4或者IPV6

其他的数据类型参考官网:Field datatypes | Elasticsearch Guide [6.5] | Elastic

5 创建索引并指定(settings,mappings),搞结构

语法如下

 # 创建索引,指定数据结构
 PUT /book
 {
   "settings": {
     # 分片数
     "number_of_shards": 5,
     # 备份数
     "number_of_replicas": 1
   },
   # 指定数据结构
   "mappings": {
     # 类型 Type
     "novel": {
       # 文档存储的Field
       "properties": {
         # Field属性名
         "name": {
             # 类型
           "type": "text",
             # 指定分词器
           "analyzer": "ik_max_word",
             # 指定当前Field可以被作为查询的条件
           "index": true ,
             # 是否需要额外存储,一般不需要,可以通过其他关键字比如_source查出来
           "store": false 
         },
         "author": {
           "type": "keyword"
         },
         "count": {
           "type": "long"
         },
         "on-sale": {
           "type": "date",
            # 时间类型的格式化方式 
           "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
         },
         "descr": {
           "type": "text",
           "analyzer": "ik_max_word"
         }
       }
     }
   }
 }
 

6 文档的操作

文档是ES服务中的唯一标识,_index,_type,_id三个内容为组合,锁定一个文档,如果不存在就添加,否则就是修改。

6.1 新建文档

自动生成_id,在路径/下不写id,es给你自动生成,写了比如/1就用你指定的id1,很容易理解↓

 # 添加文档,自动生成id
 POST /book/novel
 {
   "name": "盘龙",
   "author": "我吃西红柿",
   "count": 100000,
   "on-sale": "2000-01-01",
   "descr": "山重水复疑无路,柳暗花明又一村"
 }

手动指定_id

 # 添加文档,手动指定id
 PUT /book/novel/1
 {
   "name": "红楼梦",
   "author": "曹雪芹",
   "count": 10000000,
   "on-sale": "1985-01-01",
   "descr": "一个是阆苑仙葩,一个是美玉无瑕"
 }

6.2 修改文档

覆盖式修改,覆盖所有

 # 添加文档,手动指定id,除了添加,第二次就是就是覆盖式修改
 PUT /book/novel/1
 {
   "name": "红楼梦",
   "author": "曹雪芹",
   "count": 4353453,
   "on-sale": "1985-01-01",
   "descr": "一个是阆苑仙葩,一个是美玉无瑕"
 }

doc修改方式,修改某个

 # 修改文档,基于doc方式
 POST /book/novel/1/_update
 {
   "doc": {
     "count": "1234565"
   }
 }

6.3 删除文档

根据id删除

 # 根据id删除文档,下面这个au1kkHoB7Xrpe4LJZRou是之前不指定自动生成的id,如果是手动指定的比如1,就写1
 DELETE /book/novel/I8iXnnoB3j5F3DdMxsYB

6.4 查询文档

比如查询id为2的文档数据↓

GET /book/novel/2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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