elasticSearch的索引库文档的增删改查
我们都知道,elasticsearch在进行搜索引擎的工作时,是会先把数据库中的信息存储一份到elasticsearch中,再去分词查询等之后的工作的。
elasticsearch中的文档数据会被序列化为json格式后存储在elasticsearch中。elasticsearch会对存储的数据进行分类管理,相同类型的放在一起。
索引:相同类型的文档的集合(即同一类型数据的集合)叫索引(这个不是MySQL中的那个索引),为了区分开,我们通常把这的索引叫索引库(对应的mysql数据库中的table表)。
映射:索引中文档的字段约束信息,类似表的结构约束。常见的mapping映射有:
type: 字段数据类型,常见类型有:1、字符串:text(可分词)、keyword(精确值,不可分词,比如品牌名) ; 2、数值: long、integer、short、byte、double、float ;3、布尔:boolean; 4、日期: date; 5、对象: object
index:是否创建索引,默认是true。看看在实际搜索时你会不会根据这个字段进行筛选查询,不会用到,就false。
analyser:分词器,只有text类型才会分词
properties :该字段的子字段,只有object才会用到。
#创建索引库并设置mapping映射 PUT /heima { "mappings": { "properties": { "info":{ "type": "text" , "analyzer": "ik_smart" }, "age":{ "type": "byte" }, "email":{ "type": "keyword" , "index": false }, "name":{ "type": "object", "properties": { "firstName": { "type": "keyword" }, "lastName": { "type": "keyword" } } } } } } #查询索引库 GET /heima #删除索引库 DELETE /heima
这代码意思是我们创建的索引库 名叫 /heima 其中属性用info 、age、email、name(子属性 firstName、lastName);
修该操作有点特殊,不支持对索引库中已有的字段进行修改,但可以新增没有的字段
#修改索引库,不支持对已有的索引库做出修改,但可以添加新的字段 PUT /heima/_mapping { "properties":{ "info":{ "type":"keyword" } } }
下面是对索引库中文档的增删改查:
#新增文档 post /索引库名/_doc/文档id POST /heima/_doc/1 { "age":21, "email":"****1", "info":"黑马程序员Java学习", "name":{ "firstName":"yun", "lastName":"zhao" } } #查询文档 GET /heima/_doc/1 #删除文档 DELETE /heima/_doc/1
同样,修改操作有点特殊,有俩种方式:
#方法一:全量修改,会删除旧文档,添加新文档,文档内所有字段都需要写一遍 #如果修改的文档id对应文档不存在,修改操作就会变为新增操作 PUT /heima/_doc/1 { "age":21, "email":"****2", "info":"黑马程序员Java学习", "name":{ "firstName":"yun", "lastName":"zhao" } } #方法二:增量修改,修改指定字段 POST /heima/_update/1 { "doc": { "email":"*****3" } }
批量处理:同时新增、删除、更新多个数据:
#批量处理 index为新增,注意!新增的各个字段必须写在同一行中。 POST /_bulk {"index":{"_index":"heima","_id":3}} {"info":"黑马程序员Java学习3","age":23,"email":"****3","name":{"firstName":"wu","lastName":"wang"}} {"index":{"_index":"heima","_id":4}} {"info":"黑马程序员Java学习4","age":24,"email":"****4","name":{"firstName":"liu","lastName":"liu"}} #批量删除 delete为删除 POST /_bulk {"delete":{"_index":"heima","_id":3}} {"delete":{"_index":"heima","_id":4}} #批量更新 update 。 doc中写要更新的字段 POST /_bulk {"update":{"_id":3,"_index":"heima"}} {"doc":{"email":"****3.1"}} {"update":{"_id":4,"_index":"heima"}} {"doc":{"email":"****4.1"}}