zoukankan      html  css  js  c++  java
  • 05 curl 操作elasticsearch的CRUD

    中文文档:
    https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html

    查看健康状态

    curl -X GET 127.0.0.1:9200/_cat/health?v

    查询当前es集群中所有的indices

    curl -X GET 127.0.0.1:9200/_cat/indices?v

    推荐使用Kibana进行DSL编写,有代码提示与纠正(提示给跟我一样的小白)

    创建索引并配置:

    number_of_shards为数据分片,默认值为5

    number_of_replicas为数据备份数,如果只有一台机器,建议设置为0,避免索引一直处于yellow状态

    注:该设置创建索引后无法修改(我记得是这样,有错望纠正)

    PUT /index_name/_settings
    {
        "number_of_shards": 3,
        "number_of_replicas": 0
    }
    

    定义字段的类型

    text:文本类型(会被es分词器进行分词)可以保存字符串也可以保存数组
    keyword:文本类型(不被分词) 可以保存字符串也可以保存数组
    scaled_float:浮点型数据类型,scaling_factor用于精度限制
    date:时间类型,可用format约束时间格式(epoch_millis为时间戳)
    

    例子:

    查看mapping

    PUT /index_name/_doc/_mapping?pretty

    {
        "_doc":{
            "properties":{
                "my_id":{
                    "type":"long"
                },
                "content":{
                    "type":"text"
                },
                "money":{
                    "type":"scaled_float",
                    "scaling_factor":100
                },
                "customer":{
                    "type":"keyword"
                },
                "sync":{
                    "type":"boolean"
                },
                "create_time":{
                    "type":"date",
                    "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        }
    }
    

    保存数组

    textkeywor 类型可以保存字符串也可以保存数组

    "properties": {
      "fofa_rules": {
      "type": "keyword"
    }
    

    创建mapping

    curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user1 -d '
    {
        "mappings":{
            "person":{
                "properties":{
                    "address":{
                        "type":"text",
                        "fields":{
                            "keyword":{
                                "ignore_above":2048,
                                "type":"keyword"
                            }
                        }
                    },
                    "name":{
                        "type":"text",
                        "fields":{
                            "keyword":{
                                "ignore_above":256,
                                "type":"keyword"
                            }
                        }
                    }
                }
            }
        }
    }' | jq .
    

    存字符串

    修改值为字符串

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/1/_update -d'
    {
      "doc":{
        "name":"lisi",
        "address":"北京"
      }
    }'
    
    

    curl -X GET 127.0.0.1:9200/user/person/_search?q=_id:1 | jq .

    查询结果:

    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
          {
            "_index": "user",
            "_type": "person",
            "_id": "1",
            "_score": 1,
            "_source": {
              "name": "lisi",
              "age": 9,
              "married": false,
              "address": "北京"
            }
          }
        ]
      }
    }
    
    

    存数组

    修改值为数组

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/1/_update -d'
    {
      "doc":{
        "name":["lisi","wangwu"],
        "address":["安徽","北京"]
      }
    }'
    

    curl -X GET 127.0.0.1:9200/user/person/_search?q=_id:1 | jq .

    查询结果

    {
      "took": 10,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
          {
            "_index": "user",
            "_type": "person",
            "_id": "1",
            "_score": 1,
            "_source": {
              "name": [
                "lisi",
                "wangwu"
              ],
              "age": 9,
              "married": false,
              "address": [
                "安徽",
                "北京"
              ]
            }
          }
        ]
      }
    }
    

    创建索引

    curl -X PUT 127.0.0.1:9200/www

    删除索引

    curl -X DELETE 127.0.0.1:9200/www

    获取mapping

    curl -X GET 127.0.0.1:9200/user/_mapping?pretty

    返回参数

    {
      "user" : {
        "mappings" : {
          "person" : {
            "properties" : {
              "age" : {
                "type" : "long"
              },
              "married" : {
                "type" : "boolean"
              },
              "name" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "query" : {
                "properties" : {
                  "match" : {
                    "properties" : {
                      "name" : {
                        "type" : "text",
                        "fields" : {
                          "keyword" : {
                            "type" : "keyword",
                            "ignore_above" : 256
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    创建mapping

    注意:

    1. 这里只要上面获取mapping返回值里的mapping值
    2. 要创建的索引必需不存在
    curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user -d '
    {
        "mappings":{
            "person":{
                "properties":{
                    "age":{
                        "type":"long"
                    },
                    "married":{
                        "type":"boolean"
                    },
                    "name":{
                        "type":"text",
                        "fields":{
                            "keyword":{
                                "type":"keyword",
                                "ignore_above":256
                            }
                        }
                    }
                }
            }
        }
    }' | jq .
    

    添加字段

    user引索的person类型添加字段

    curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user/_mapping/person -d '
    {
        "properties":{
            "created_at":{
                "format":"YYYY-MM-dd HH:mm:ss",
                "type":"date"
            },
            "it":{
                "type":"boolean"
            },
            "is_scan":{
                "type":"long"
            },
            "address":{
                "type":"text",
                "fields":{
                    "keyword":{
                        "ignore_above":256,
                        "type":"keyword"
                    }
                }
            }
        }
    }'
    

    设置默认值

    参考下面文档

    https://blog.csdn.net/huangzhen__/article/details/104769018?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-1-104769018.pc_agg_new_rank&utm_term=Mapping%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E5%80%BC&spm=1000.2123.3001.4430

    插入记录

    post的方式,会自动生成id

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person -d '
    {
    	"name": "dsb",
    	"age": 9000,
    	"married": true
    }'
    

    输出:

    {
        "_index":"user",
        "_type":"person",
        "_id":"55GiOH4BfTVguARX3JmZ",
        "_version":1,
        "result":"created",
        "_shards":{
            "total":2,
            "successful":1,
            "failed":0
        },
        "_seq_no":0,
        "_primary_term":1
    }
    

    也可以使用PUT方法,但是需要传入id

    curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user/person/4 -d '
    {
    	"name": "sb",
    	"age": 9,
    	"married": false
    }'
    

    检索

    Elasticsearch的检索语法比较特别,使用GET方法携带JSON格式的查询条件。
    以下带 | jq .需要安装jq这是格式化json显示

    全检索:

    curl -X GET 127.0.0.1:9200/user/person/_search | jq .

    输出结果:

    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 2,
        "max_score": 1,
        "hits": [
          {
            "_index": "user",
            "_type": "person",
            "_id": "55GiOH4BfTVguARX3JmZ",
            "_score": 1,
            "_source": {
              "name": "dsb",
              "age": 9000,
              "married": true
            }
          },
          {
            "_index": "user",
            "_type": "person",
            "_id": "4",
            "_score": 1,
            "_source": {
              "name": "sb",
              "age": 9,
              "married": false
            }
          }
        ]
      }
    }
    

    按条件检索:

    get查询

    curl -X GET 127.0.0.1:9200/user/person/1 | jq .

    查询结果:

    {
      "_index": "user",
      "_type": "person",
      "_id": "1",
      "_version": 4,
      "found": true,
      "_source": {
        "name": "lisi",
        "age": 9,
        "married": false,
        "address": "北京"
      }
    }
    
    

    name=sb的记录

    curl -X GET 127.0.0.1:9200/user/person/_search?q=name:sb | jq .

    返回参数:

    {
      "took": 2,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 0.2876821,
        "hits": [
          {
            "_index": "user",
            "_type": "person",
            "_id": "1",
            "_score": 0.2876821,
            "_source": {
              "name": "sb",
              "age": 9,
              "married": false
            }
          }
        ]
      }
    }
    

    age=9的记录

    curl -X GET 127.0.0.1:9200/user/person/_search?q=age:9 | jq .

    post查询

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_search -d '
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "name": "sb"
              }
            }
          ]
        }
      }
    }' | jq .
    

    输出结果:

    {
      "took": 4,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 0.6931472,
        "hits": [
          {
            "_index": "user",
            "_type": "person",
            "_id": "4",
            "_score": 0.6931472,
            "_source": {
              "name": "sb",
              "age": 9,
              "married": false
            }
          }
        ]
      }
    }
    

    更多条件

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_search -d '
    {
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "age": {
                  "gt": "10"
                }
              }
            }
          ]
        }
      },
      "from": 0,
      "size": 10,
      "sort": {
        "age": {
          "order": "desc"
        }
      },
      "aggs": {}
    }' | jq .
    

    返回结果:

    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 2,
        "max_score": null,
        "hits": [
          {
            "_index": "user",
            "_type": "person",
            "_id": "55GiOH4BfTVguARX3JmZ",
            "_score": null,
            "_source": {
              "name": "dsb",
              "age": 9000,
              "married": true
            },
            "sort": [
              9000
            ]
          },
          {
            "_index": "user",
            "_type": "person",
            "_id": "0ZHGOH4BfTVguARXXZoF",
            "_score": null,
            "_source": {
              "name": "sbs",
              "age": 6000,
              "married": true
            },
            "sort": [
              6000
            ]
          }
        ]
      }
    }
    
    

    修改

    指定id修改

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/4/_update -d'
    {
      "doc":{
        "name":"11"
      }
    }'
    

    返回结果:

    {
        "_index":"user",
        "_type":"person",
        "_id":"4",
        "_version":2,
        "result":"updated",
        "_shards":{
            "total":2,
            "successful":1,
            "failed":0
        },
        "_seq_no":2,
        "_primary_term":1
    }
    

    按条件修改

    把所有age>1的所有记录的married修改为true

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_update_by_query -d'
    {
        "script":{
            "source":"ctx._source.married=params.married",
            "params":{
                "married":true
            }
        },
        "query":{
            "bool":{
                "must":[
                    {
                        "range":{
                            "age":{
                                "gt":"1"
                            }
                        }
                    }
                ]
            }
        }
    }'
    

    把所有age>1的所有记录的age修改为12

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_update_by_query -d'
    {
        "script":{
            "source":"ctx._source.age=12"
        },
        "query":{
            "bool":{
                "must":[
                    {
                        "range":{
                            "age":{
                                "gt":"1"
                            }
                        }
                    }
                ]
            }
        }
    }'
    
    

    把所有name=sbs的所有记录的age修改为38

    {
        "script":{
            "source":"ctx._source.age=38"
        },
        "query":{
            "bool":{
                "must":[
                    {
                        "match":{
                            "name":"sbs"
                        }
                    }
                ]
            }
        }
    }
    

    删除

    删除指定id的记录

    curl -H "Content-Type:application/json" -X DELETE 127.0.0.1:9200/user/person/4

    按条件删除

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_delete_by_query -d'
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "match":{
                            "name":"sb"
                        }
                    }
                ]
            }
        }
    }'
    
    

    删除所有数据

    curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_delete_by_query -d'
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "match_all":{
    
                        }
                    }
                ]
            }
        }
    }'
    
    [Haima的博客] http://www.cnblogs.com/haima/
  • 相关阅读:
    Angular项目中引入jQuery
    ERROR in Error: ***Module is not an NgModule
    angular-cli项目报Error encountered resolving symbol values statically. Function calls are not supported.错误的处理。
    在angular项目中使用bootstrap的tooltip插件时,报错Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>的解决方法和过程
    微信小程序学习笔记(四)--框架-视图层
    js打印窗口内容并当窗口内容较长时自动分页
    微信小程序学习笔记(三)--框架-逻辑层
    微信小程序学习笔记(二)--框架-全局及页面配置
    微信小程序学习笔记(一)--创建微信小程序
    在ag-grid表格上实现类似Excel中的按下enter键自动跳转到下一行对应的输入框功能,Angular4开发
  • 原文地址:https://www.cnblogs.com/haima/p/15778461.html
Copyright © 2011-2022 走看看