一、索引操作:
1. 创建索引
PUT /${index_name} { "settings": { // 索引相关的设置项 "number_of_shards": 15, // 指定主分片个数 "number_of_replicas": 2, // 指定副分片个数 }, "mappings": { // 映射(表架构) "properties": { } } }2. 删除索引
DELETE /${index_name}
3. 关闭索引
POST /${index_name}/_close
4. 打开索引
POST /${index_name}/_open
5. 别名操作
POST /_aliases { "actions": [ { "add": { // 添加别名或更新配置 "index": ${index_name}, "alias": ${alias_name} } }, { "remove": { // 删除别名 "index": ${index_name}, "alias": ${alias_name} } } } }
二、映射操作
1. 查看映射
GET /${index_name}/_mapping
2. 扩展映射
POST /${index_name}/_mapping { "properties": { $(field): { "type": $(type) } } }
3. 动态映射
1)当字段没有定义时,ES可以根据写入的数据自动定义该字段的类型
2)一般提前定义好数据类型并将索引创建语句纳入SVN或Git管理范围
4. 基本类型
1)keyword类型:不进行切分的字符串类型
2)text类型:可进行切分的字符串类型
3)数值类型:long、integer、short、byte、double、float、half_float、scaled_float、unsigned_log,尽可能选择范围小的数据类型,可用于对文档进行过滤、排序和聚合
4)布尔类型
5)日期类型: date,默认是标准的UTC格式,可通过format属性自定义格式 yyyy-MM-dd HH:mm:ss
6)数组类型: []
7)对象类型: {"properties": {}}
8)地理类型: geo_point,lat为纬度,lon为经度
5. 多字段:
针对同一个字段,需要不同的数据类型;
定义好字段之后,可使用fields定义其子字段的类型
访问字段:$(filed_name).$(filed_name_keyword)
三、文档操作
1. 单条写入文档
POST /${index_name}/_doc/${_id} // 当${id}不存在时,该_id值由ES自动生成 { ${field_name}: "" }
2. 批量写入文档
POST /_bulk {"index": {"_index": "${index_name}"}} {"_id": "", "${filed_name}": ""} {"index": {"_index": "${index_name}"}} {"_id": "", "${filed_name}": ""}
3. 更新单条文档
POST /${index_name}/_update/${_id} { "doc": { "${field_name}": "" } }
4. 批量更新文档
POST /_bulk {"update": {"_index": "${index_name}", "_id": "${_id}"}} {"doc": {"${filed_name}": ""}} {"update": {"_index": "${index_name}", "_id": "${_id}"}} {"doc": {"${filed_name}": ""}}
5. 根据条件更新文档
POST /${index_name}/_update_by_query { "query": {}, "script": {} // 相当于mysql的set }
6. 删除单条文档
DELETE /${index_name}/_doc/${_id}
7. 批量删除文档
POST /_bulk {"delete": {"_index": "${index_name}", "_id": "${_id}"}} {"delete": {"_index": "${index_name}", "_id": "${_id}"}}
8. 根据条件删除文档
POST /${index_name}/_delete_by_query { "query": {} }
四、搜索辅助功能
1. 文档计总
GET /${index_name}/_count // 返回匹配的文档条数
2. 文档搜索
GET /${index_name}/_search // _source:指向一个json数组,数组中的元素就是希望返回的字段 // from: 设置搜索的起始位置【int类型】 // size: 设置搜索返回的文档个数,最大值为10000【int类型】 // profile:性能分析【boolean型】
3. 评分解析
GET /${index_name}/_explain/${doc_id} // 评分分析:在使用搜索引擎时,一般都会涉及到排序功能。如果用户没有指定字段进行排序,则EC会使用自己的打分算法对文档进行排序
五、搜索匹配功能:${query}子数组的属性命以及值
1. 查询所有文档,并设置所有文档的分值term查询
match_all: {"boost": 2}
2. term查询:结构化精准查询的主要查询方式,用于查询待查字段和查询值是否完全匹配
{ "term": { ${field_name}: { "value": "" } } }
3. terms查询:用于查询一个或多个值与待查字段是否完全匹配
{ "term": { ${field_name}: [ "value1", ] } }
4. range查询:用于范围查询,一般是对叔侄型和日期型数据的查询
1)gt:大于
2)lt:小于
3)gte:大于或等于
4)lte:小于或等于
5. exists查询:用于某个字段不为空的查询,字段不为空的条件有
1)值存在且不是null
2)值不是空数组
3)值是数组,但不是[null]
6. 布尔查询:复合搜索,是一种在一个搜索语句中包含一种或多种搜索子句的搜索
1)must查询:必须匹配该查询条件【与】
2)should:可以匹配该查询条件【或】
3)must not:必须不匹配该查询条件【非 与】
4)filter:必须匹配过滤条件,不进行打分计算
{ "query": { "bool": { "must": [ {}, {} ] } } }
7. match查询:全文搜索的主要代表