ES8基本命令

ElasticSearch是面向文档型数据库

构造类似于数据库:indexes(索引库=数据库)-->types(类型=表)-->documents(文档=行)-->field(字段=字段)

但是在7.X开始,Type已经开始被废弃。

正排索引:根据主键id关联内容,然后再找关键字。

倒排索引:根据关键字查询主键id。

选择Solr还是ElasticSearch

  • 由于易于使用,Elasticsearch 在新开发者中更受欢迎。一个下载和一个命令就可以启动一切。
  • 如果除了搜索文本之外还需要它来处理分析查询,Elasticsearch 是更好的选择。
  • 如果需要分布式索引,则需要选择 Elasticsearch。对于需要良好可伸缩性和以及性能分布式环境,Elasticsearch 是更好的选择。
  • Elasticsearch 在开源日志管理用例中占据主导地位,许多组织在 Elasticsearch 中索引它们的日志以使其可搜索。
  • 如果你喜欢监控和指标,那么请使用 Elasticsearch,因为相对于 Solr,Elasticsearch 暴露了更多的关键指标。

ES使用问题

SSL认证问题

Windows 环境中出现下面的错误信息,是因为开启了 SSL 认证,可以将SSL认证关闭,修改 config/elasticsearch.yml 文件,将 enabled 的值修改为 false

xpack.security.http.ssl: 
enabled: false 
keystore.path: certs/http.p12

忘记密码

bin目录下面打开cmd

修改命令:elasticsearch-reset-password --username 用户名 -i

回车以后输入y 再输入两次新密码

ES索引相关基础操作

创建索引

创建索引只能使用PUT请求不能使用POST请求,PUT有幂等性特性,而POST没有。

PUT请求:http://localhost:9200/shopping (多次相同请求除了第一会成功,后面的都会提示已存在异常,因为是同一进程)

shopping:索引名。

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "shopping"
}

获取索引信息

GET请求:http://localhost:9200/shopping

shopping:索引名

{
  "shopping": {
    "aliases": {},
    "mappings": {},
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "1",
        "provided_name": "shopping",
        "creation_date": "1683357102325",
        "number_of_replicas": "1",
        "uuid": "oTVh5cIrS7WomyytmArs0g",
        "version": {
          "created": "8070199"
        }
      }
    }
  }
}

删除索引

DELETE请求:https://localhost:9200/shopping

shopping:索引名

{
  "acknowledged": true
}

查询所有索引

GET请求:http://localhost:9200/_cat/indices?v

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   shopping 3XaaMCiWT5CJqu2uwZh2gA   1   1          0            0       225b           225b

ES文档相关操作

从7.X版本以后Type被废弃,所有文档直接存储在索引内。

配置映射关系

PUT请求:http://localhost:9200/shopping/_mapping

配置映射关系需要在创建索引完成后,在添加数据之前进行配置,否则字段的属性类型是不可修改的,默认是text

{
    "properties":{
        "usename":{        //字段名
            "type": "text",  //可以分词
            "index": true   //可以通过索引查询
        },
        "sex": {
            "type": "keyword",  //不可以分词,需要完全匹配才能查到
            "index": true   //可以通过索引查询
        },
        "age": {
            "type": "keyword",  //不可以分词,需要完全匹配才能查到
            "index": false   //不可以通过索引查询(不能查这个字段)
        }
    }
}

创建文档

创建文档时必需要有json参数

随机id形式创建文档只能使用POST请求不能使用PUT请求,否则会报异常。

POST请求:随机id:http://localhost:9200/shopping/_doc

另外相同参数可以进行多次请求,每次请求返回的id是不同的。id是可以自定义的,只需在请求后面加自定义的id即可。

自定义id形式创建文档既能使用POST请求又能使用PUT请求。

自定义id:http://localhost:9200/shopping/_doc/23333

注:自定义id形式创建文档时_doc可以替换为_create,随机id形式不可以。自定义id形式多次请求,除第一次外都为修改,而随机id形式为多次创建且id不同。

JSON参数:{
  "username": "阿桃",
  "password": "123456",
  "sex": "man",
  "age": "26"
}
随机id形式请求返回结果:{
    "_index": "shopping",
    "_id": "sxQC8IcBaTXEOVHb3Nge",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}
自定义id形式请求返回结果{
    "_index": "shopping",
    "_id": "23333",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 1,
    "_primary_term": 1
}

查询文档:主键查询

GET请求:http://localhost:9200/shopping/_doc/23333

//查询成功
{
    "_index": "shopping",
    "_id": "23333",
    "_version": 3,
    "_seq_no": 9,
    "_primary_term": 1,
    "found": true, 
    "_source": {
        "username": "阿桃",
        "password": "123456",
        "sex": "man",
        "age": "26"
    }
}
//查询失败
{
    "_index": "shopping",
    "_id": "23336",
    "found": false
}

查询文档:单条件查询

请求路径方式:GET请求:http://localhost:9200/shopping/_search?q=username:大豪(中文时容易乱码)

{
    "took": 888,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 3.583519,
        "hits": [
            {
                "_index": "shopping",
                "_id": "23333",
                "_score": 3.583519,
                "_source": {
                    "username": "大豪",
                    "password": "123456",
                    "sex": "man",
                    "age": "26"
                }
            }
        ]
    }
}

请求体方式:GET请求:http://localhost:9200/shopping/_search (GET,POST都可以使用)

查询时es会把关键字进行分词,比如"大桃",es会分成"大"和"桃",会把大豪和阿桃都查询出来。

如果想要完全匹配而不分词需要把“match”换成“match_phrase”即可

JSON参数格式
{
    "query":{
        "match":{
            "username":"大豪"
        }
    },
    "from": 0,  //分页设置 起始条 计算方式:(页码-1)*页大小  不需要分页时from和size不需要设置
    "size": 3,  //页大小
    "_source": ["username","age"],   //过滤,括号内填想要显示的字段  全显示时无需设置该属性
    "sort":{     //排序设置   不需要排序时无需设置
        "age":{  //需要排序的属性
          "order": "asc"
        }
    },
    "highlight":{    //高亮显示
        "fields":{   //fields内填写要高亮显示的字段
            "username":{}   
        }
    }
}
返回结果
{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 3.583519,
        "hits": [
            {
                "_index": "shopping",
                "_id": "23333",
                "_score": 3.583519,
                "_source": {
                    "username": "大豪",
                    "password": "123456",
                    "sex": "man",
                    "age": "26"
                }
            }
        ]
    }
}

查询文档:多条件查询

GET请求:http://localhost:9200/shopping/_search

{
    "query":{
        "bool":{
            "must":[  //must是and的意思,则should是or的意思
                {
                    "match": {
                        "username": "大豪"
                    }
                },
                {
                    "match": {
                        "password":"123456"
                    }
                }
            ],
            "filter":{   //范围筛选
                "range":{
                    "age":{
                      	"gt": 25     //大于、小于、等于、大于等于、小于等于
                  	}
              	}
        		}
        }
    }
}

查询全部文档

GET请求:http://localhost:9200/shopping/_search

也可以加一个JSON参数查询(可加可不加)
{
    "query":{
        "match_all":{

        }
    },
  "from": 0,  //分页设置 起始条 计算方式:(页码-1)*页大小  不需要分页时from和size不需要设置
  "size": 3,  //页大小
  "_source": ["username","age"],   //过滤,括号内填想要显示的字段  全显示时无需设置该属性
  "sort":{     //排序设置   不需要排序时无需设置
      "age":{  //需要排序的属性
        "order": "asc"
      }
  }
}
返回结果
{
    "took": 75,//查询耗费时间 ms
    "timed_out": false, //是否超时
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [//所有查询到的结果
            {
                "_index": "shopping",
                "_id": "23333",
                "_score": 1.0,
                "_source": {
                    "username": "阿桃",
                    "password": "123456",
                    "sex": "man",
                    "age": "26"
                }
            },
            {
                "_index": "shopping",
                "_id": "tBQS8IcBaTXEOVHb0tiQ",
                "_score": 1.0,
                "_source": {
                    "username": "阿桃",
                    "password": "123456",
                    "sex": "man",
                    "age": "26"
                }
            }
        ]
    }
}

聚合查询

GET请求:http://localhost:9200/shopping/_search

//eg.1 平均值
{
    "aggs":{  //聚合操作
        "price_avg":{   //自定义名称
            "avg":{  //平均值
                "field":"age"  //字段名
            }
        }
    },
    "size":0   //size设置成0不显示原数据,否则会把原数据显示出来
}
//eg.2 分组
{
    "aggs":{  //聚合操作
        "price_group":{   //自定义名称
            "terms":{  //平均值
                "field":"age"  //字段名
            }
        }
    },
    "size":0   //size设置成0不显示原数据,否则会把原数据显示出来
}

修改文档

  • 全量修改

操作和上述的自定义id形式创建文档相同。

  • 局部修改

POST请求:http://127.0.0.1:9200/shopping/_update/23333

JSON参数格式
{
    "doc":{
        "username":"大豪"
    }
}
返回结果
{
    "_index": "shopping",
    "_id": "23333",
    "_version": 4,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 13,
    "_primary_term": 1
}

删除文档

DELETE请求:http://localhost:9200/shopping/_doc/23333

{
    "_index": "shopping",
    "_id": "23333",
    "_version": 5,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 14,
    "_primary_term": 1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值