ES的基本操作
RESTful 请求格式
- GET 获取资源 /getUser/1
- DELETE 删除资源 /deleteUser/1
- PUT 修改资源 /updateUser/1
- POST 创建资源 /createUser
- HEAD 与GET类似,但不返回message body内容,仅获取资源的部分信息。
- OPTIONS 用于URL验证,验证接口服务是否正常。
- PATCH 用于创建更新资源,与PUT类似。
字段格式
字符串:text
与 keyword
text:
按规则分词,至少分词1个词,做全文检索(不要存放空值,会导致性能浪费)
默认分词器standard
应用场景:用于分词检索场景
keyword:
不分词,仅仅一个词,查询效率高,早期没有这个类型,用String代替,通过属性设置
应用场景:固定文本,无需全文检索,如姓名,省,商品类目。
整数:Long(64bit)、Integer(32bit、21亿)、short(16bit)、Byte(8bit)
浮点:Double 、Float 、Half Float 、Scaled float(缩放浮点类型,解决浮点类型计算精度的错误问题)日期类型 date
复合字段类型
object:json对象形式,可嵌套多种子对象
Mapping映射(类似于关系型数据库中的schema,用来描述表的结构)
_source: enable:true false
dynamic : true false strict
range:(BKD树算法)
"gte"大于,"lte"小于,整型范围、浮点范围、日期范围、ip范围
field_detect:字段类型自动检测,默认开启
特殊类型
关联字段类型:join父子类型
定义:数据存在父子关系,一条数据可以有多条子数据,一条子数据仅有一条父数据
alias:别名
flattened:平铺(对象object类型的一种改进,对象object类型可以动态扩展多个字段,fattend就当成一个字段,且保证原来的json格式),使用场景:日志领域
constant_keyword:固定值,不可以被修改,应用场景:数据的版本号等
Multi_fileds:多字段类型,可设计为多种类型,
高级数据字段类型
geo_point:地理位置。
geo_shape:地理图形(应用:在地图上画一个区域,在区域内进行检索)
shape:多边图形应用(2D平面类型检索,支持多边形)
特殊行业字段:网络地址,直方图类型,词项统计,自动完成类型。
DDL操作
数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。
建表
请求:put URL:192.168.2.11:9200/IndexName/tyepName
索引名称-类型名称-id
put
{
"settings":{
"number_of_shards":5,
"number_of_replicas":1
},
"mappings":{
"TypeName":{
"dynamic":"strict",
"properties":{
}
}
}
}
属性说明:
properties表示表的字段
- type字段类型,所有得字段都设置成了string,是因为在查询和编码过程中,有些类型不能很好的被转换,例如boolean
- store是否存储,属性有yes或者no,无论那种属性都会被存储,但如果设置成no,在查询的时候是无法用此属性作为查询项的,基于拓展和业务方便维护,建议使用yes
- index是否索引,属性有not_analyzed(分词不分析)、analyzed(分词分析)、no(不分析不分词)
- analyzer使用哪种分词器,在安装es的时候会自己安装分词器,例如IK分词器,在此指定分词的时候使用的是哪种分词器
- search_analyzer使用哪种分词器,但不是在入库的时候,而是在做查询的时候使用哪种分词器
- ignore_above对超过 ignore_above 的字符串,analyzer 不会进行处理;所以就不会索引起来。导致的结果就是最终搜索引擎搜索不到了。这个选项主要对 not_analyzed 字段有用,这些字段通常用来进行过滤、聚合和排序。而且这些字段都是结构化的,所以一般不会允许在这些字段中索引过长的项。
- format日期格式要求,例如设置为"yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
dynamic表示是否使用动态映射,属性有
- true默认值,动态添加字段
- false忽略新字段
- strict如果碰到陌生字段,抛出异常
settings表示设置
num_of_shards设置分片数量,默认为5
num_of_replicas设置副本数量,默认为1
删表
请求:delete URL:192.168.2.11:9200/IndexName
改表
elasticsearch 并不支持修改mapping映射字段,无法直接修改。
将原有数据迁移到新表数据。
POST _reindex
{
"source": {
"index": "metricbeat-*"(老的索引名)
},
"dest": {
"index": "metricbeat"(新的索引名)
}
}
DML操作
数据操纵语句,用于添加、删除、更新和查询数据库记录。
一下都省略了访问地址 端口号。localhost:9200
增加
put
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
删除
delete
DELETE /megacorp/employee/1
修改
put
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
查询
GET /megacorp/employee/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [],
"aggs": {}
}
- query: 判断条件。
- must
- must_not
- should 应该
- from:起始数据。
- size:获取大小。
- sort:排序。
- aggs:聚合。