中文文档:
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"
            }
        }
    }
}

保存数组

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

"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 .

设置默认值

参考下面文档

https://blog.csdn.net/huangzhen__/article/details/104769018?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_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/certdata-resourcedownload/_delete_by_query -d'
{
  "runtime_mappings": {
    "storageAt": {
      "type": "date",
      "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
    }
  },
  "size": 1, 
  "query": {
   "range": {
     "storageAt": {
       "lt": "2022-12-08 04:14:28"
     }
   }
  }
}'

执行删除命令

curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/analysis-assets_poc/_delete_by_query -d'
{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "updateAt"
          }
        }
      ]
    }
  }
}'

删除所有数据

# user和product索引里类型为_doc的删除所有数据
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user,product/_doc/_delete_by_query -d'
{
    "query":{
        "bool":{
            "must":[
                {
                    "match_all":{

                    }
                }
            ]
        }
    }
}'
作者:海马  创建时间:2023-03-19 11:02
最后编辑:海马  更新时间:2024-05-10 15:32