主页 > IT业界  > 

06_ElasticSearch:索引和文档的CURD

06_ElasticSearch:索引和文档的CURD

06_ElasticSearch:索引和文档的CURD 索引的CURD新增查询修改删除 文档crud新增查询改删除批量操作 Bulk API

索引的CURD 新增 # 创建索引名为 tehero_index 的索引 PUT /tehero_index?pretty { # 索引设置 "settings": { "index": { "number_of_shards": 1, # 分片数量设置为1,默认为5 "number_of_replicas": 1 # 副本数量设置为1,默认为1 } }, # 映射配置 "mappings": { "_doc": { # 类型名, 7 版本不允许设置 "dynamic": false, # 动态映射配置 # 字段属性配置 "properties": { "id": { "type": "integer" # 表示字段id,类型为integer }, "name": { "type": "text", "analyzer": "ik_max_word", # 存储时的分词器 "search_analyzer": "ik_smart" # 查询时的分词器 }, "createAt": { "type": "date" } } } } }

注:dynamic:是动态映射的开关,有3种状态:true 动态添加新的字段–缺省;推荐使用)false 忽略新的字段,不会添加字段映射,但是会存在于_source中;(strict 如果遇到新字段抛出异常;

查询 GET /tehero_index # 索引名,可以同时检索多个索引或所有索引 如:GET /* GET /tehero_index,other_index GET /_cat/indices?v #查看所有 index 修改

ES提供了一系列对index修改的语句,包括副本数量的修改、新增字段、refresh_interval值的修改、索引分析器的修改(后面重点讲解)、别名的修改

# 修改副本数 PUT /tehero_index/_settings { "index" : { "number_of_replicas" : 2 } } # 修改分片刷新时间,默认为1s PUT /tehero_index/_settings { "index" : { "refresh_interval" : "2s" } } # 新增字段 age PUT /tehero_index/_mapping/_doc { "properties": { "age": { "type": "integer" } } } 删除 # 删除索引 DELETE /tehero_index # 验证索引是否存在 HEAD tehero_index 返回:404 - Not Found 文档crud 新增 # 新增单条数据,并指定es的id 为 1 PUT /tehero_index/_doc/1?pretty { "name": "Te Hero" } # 新增单条数据,使用ES自动生成id POST /tehero_index/_doc?pretty { "name": "Te Hero2" } # 使用 op_type 属性,强制执行某种操作 PUT tehero_index/_doc/1?op_type=create { "name": "Te Hero3" } 注意:op_type=create强制执行时,若id已存在,ES会报“version_conflict_engine_exception”。 op_type 属性在实践中同步数据时是有用的,后面讲解数据库与ES的数据同步问题时,TeHero再为大家详细讲解。 查询 我们查询数据,看下效果:GET /tehero_index/_doc/_search 改 # 根据id,修改单条数据 (ps:修改语句和新增语句相同,可以理解为根据ID,存在则更新;不存在则新增) PUT /tehero_index/_doc/1?pretty { "name": "Te Hero-update" } # 根据查询条件id=10,修改name="更新后的name"(版本冲突而不会导致_update_by_query 中止) POST tehero_index/_update_by_query { "script": { "source": "ctx._source.name = params.name", "lang": "painless", "params":{ "name":"更新后的name" } }, "query": { "term": { "id": "10" } } } 删除 # 1、根据id,删除单个数据 DELETE /tehero_index/_doc/1 # 2、delete by query POST tehero_index/_delete_by_query { "query": { "match": { "name": "2" } } } 批量操作 Bulk API # 批量操作 POST _bulk { "index" : { "_index" : "tehero_test1", "_type" : "_doc", "_id" : "1" } } { "this_is_field1" : "this_is_index_value" } { "delete" : { "_index" : "tehero_test1", "_type" : "_doc", "_id" : "2" } } { "create" : { "_index" : "tehero_test1", "_type" : "_doc", "_id" : "3" } } { "this_is_field3" : "this_is_create_value" } { "update" : {"_id" : "1", "_type" : "_doc", "_index" : "tehero_test1"} } { "doc" : {"this_is_field2" : "this_is_update_value"} } # 查询所有数据 GET /tehero_test1/_doc/_search 结果: { "took": 33, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 2, "max_score": 1, "hits": [ { "_index": "tehero_test1", "_type": "_doc", "_id": "1", "_score": 1, "_source": { "this_is_field1": "this_is_index_value", "this_is_field2": "this_is_update_value" } }, { "_index": "tehero_test1", "_type": "_doc", "_id": "3", "_score": 1, "_source": { "this_is_field3": "this_is_create_value" } } ] } }

注:POST _bulk 都做了哪些操作呢?

1、若索引“tehero_test1”不存在,则创建一个名为“tehero_test1”的 index,同时若id = 1 的文档存在,则更新;不存在则插入一条 id=1 的文档;

2、删除 id=2 的文档;

3、插入 id=3 的文档;若文档已存在,则报异常;

4、更新 id = 1 的文档。

ps:批量操作在实践中使用是比较多的,因为减少了IO,提高了效率!

标签:

06_ElasticSearch:索引和文档的CURD由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“06_ElasticSearch:索引和文档的CURD