(一)索引的相关操作
-
创建索引库
// 语法 PUT /索引名称 { settings:{ "属性名":"属性值" } } // settings:就是索引库设置,其中可以定义索引库的各种属性 比如分片数,副本数等,目前我们可以不设置,都走默认 // 样例 # 仅创建索引 PUT /index2 # 创建索引并设置分片数和副本数 PUT /index2 { "settings": { "number_of_replicas": 1, "number_of_shards": 1 } }
-
判断索引是否存在
// 语法 HEAD /索引名 // 样例 HEAD /index2
-
查看索引
// 语法 GET /索引名称1,索引名称2 // 样例 # 单个查看索引 GET /index2 # 批量查看索引 GET /index1,index2
-
查看所有索引
#方式一 GET _all #方式二 GET /cat/indices?v
-
开启索引
// 语法 POST /索引名称/_open //样例 POST /index2/_open
-
关闭索引
// 语法 // 索引关闭情况下,无法向索引库添加数据 POST /索引名称/_close // 样例 POST /index2/_close
-
删除索引
// 语法 DELETE /索引名称1,索引名称2,索引名称3... // 样例 DELETE /index1,index2
(二)映射的相关操作
索引创建之后,等于有了关系型数据库中的database。Elasticsearch7.x取消了索引type类型的设置,不允许指定类型,默认为_doc,但字段仍然是有的,我们需要设置字段的约束信息,叫做字段映射(mapping) 字段的约束包括但不限于:字段的数据类型,是否要存储,是否要索引,分词器
-
创建映射字段
// 语法 PUT /索引库名/_mapping { "properties": { "字段名": { "type": "类型", "index": true, "store": true, "analyzer": "分词器" } } } // 字段名:任意填写,下面指定许多属性,例如: // type:类型,可以是text、long、short、date、integer、object等 // index:是否索引,默认为true // store:是否存储,默认为false // analyzer:指定分词器 // 样例 PUT /index3/_mapping/ { "properties": { "name": { "type": "text", "analyzer": "ik_max_word" }, "job": { "type": "text", "analyzer": "ik_max_word" }, "logo": { "type": "keyword", "index": "false" }, "payment": { "type": "float" } } }
-
映射属性详解
- type:
常用类型介绍: String类型,又分两种:text:可分词,不可参与聚合,keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合 Numerical:数值类型,分两类,基本数据类型:long、interger、short、byte、double、float、half_float,浮点数的高精度类型:scaled_float,需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以因子后存储,取出还原。 Date:日期类型,elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。 Array:数组类型,进行匹配时,任意一个元素满足,都认为满足,排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序 Object:对象
2.index
index影响字段的索引情况。true:字段会被索引,则可以用来进行搜索。默认值就是true。false:字段不会被索引,不能用来搜索。index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。但是有些字段是我们不希望被索引的,比如企业的logo图片地址,就需要手动设置index为false。
3.store
是否将数据进行独立存储。原始的文本会存储在 _source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。
4.analyzer:指定分词器
一般我们处理中文会选择ik分词器 ik_max_word ik_smart
-
查看映射关系
// 语法 GET /索引名称/_mapping 样例 GET /index3/_mapping
-
查看所有映射关系
// 方式一 GET _mapping // 方式二 GET _all/_mapping
-
修改索引映射关系
// 语法 PUT /索引库名/_mapping { "properties": { "字段名": { "type": "类型", "index": true, "store": true, "analyzer": "分词器" } } } // 样例 PUT /index3/_mapping { "properties": { "name": { "type": "text", "index": true, "store": true, "analyzer": "ik_max_word" } } }
(三)文档的相关操作
文档,即索引库中的数据,会根据规则创建索引,将来用于搜索。可以类比做数据库中的一行数据。
-
新增文档
// 语法(指定ID) POST /索引名称/_doc/{id} // 语法(不指定ID) POST /索引名称/_doc // 样例,指定ID POST /index3/_doc/1 { "name": "leqi", "job": "金蝶需求分析师", "payment": "30000", "logo": "http://xxx.png" } // 样例,不指定ID POST /index3/_doc{ "name": "leqi", "job": "金蝶需求分析师", "payment": "30000", "logo": "http://xxx.png" }
-
查看单个文档
// 语法 GET /索引名称/_doc/{id} // 样例 GET /index3/_doc/1
元素元数据介绍
-
查看所有文档
// 语法 POST /索引名称/_search { "query": { "match_all": {} } } // 样例 POST /index3/_search { "query": { "match_all": {} } }
文档的全量更新只需要将创建文档的POST 请求换成PUT就行了,id如果存在是就会自动更新,不存在时就会自动创建
-
文档更新(局部更新)
// 语法 POST /索引名/_update/{id} { "doc":{ "field":"value" } } // 样例 POST /index3/_update/1 { "doc":{ "name":"lisi" } }
-
删除文档
// 语法 DELETE /索引名/_doc/{id} // 样例 DELETE /index3/_doc/1 // 根据查询条件删除 POST /索引库名/_delete_by_query { "query": { "match": { "字段名": "搜索关键字" } } }