ElasticSearch--基本操作

【笔记于学习尚硅谷课程所作】

3、初步检索

对 ES 的所有请求都被封装成了 REST API,因此我们可以使用 postman 来访问它

3.1 _cat

  • /_cat/nodes:查看所有节点(GET)
  • /_cat/health:查看es健康状况 (GET)
  • /_cat/master:查看主节点 (GET)
  • /_cat/indices:查看所有索引(GET)

3.2 put&post新增数据

在 postman 地址栏中输入 http://192.168.196.128:9200/索引名/类型名/id ,参数为json格式的

{ "name":"lfuser" },两种方式发送请求

  • PUT: 如果没有则新增,如果有则修改(必须指定 id)
  • POST:如果不指定id,则会自动生成 id并新增。指定 id 就会修改这个数据,之前没有也会新增,并新增版本号 (允许不带id)

如果加上_update即为修改操作

​ 在 postman 中使用 post 方法发送 http://192.168.196.128:9200/customer/external/1/_update请求,参数传:

{
     "doc": {
          "name": "xxx"
     }
}
  • 使用_update修改:会对比之前数据,如果与之前相同则不增加版本号
  • 不用_update修改:会直接修改并且增加版本号

3.3 get查询数据

在 postman 地址栏中输入 http://192.168.196.128:9200/索引名/类型名/id ,发送方式为Get,结果如下

{
    "_index": "customer",  	//所在索引
    "_type": "external",	//所在类型
    "_id": "1",				//记录id
    "_version": 1,			//版本号
    "_seq_no": 0,			//并发控制字段,每次更新就会+1,用来做乐观锁
    "_primary_term": 1,		//同上,主分片重新分配,如重启,就会变化
    "found": true,			//表示找到了数据
    "_source": {			//内容
        "name": "lfuser"
    }
}

3.4 delete删除

在 postman 中使用 delete 方法发送 http://192.168.196.128:9200/索引名/类型名/id 请求

3.5增删改查总结

  • 增:PUT和POST
  • 删:DELETE
  • 改:PUT和POST
  • 查:GET

只需要用对应的请求方式,发送http://IP地址:9200/索引名/类型名/id 请求,加上所需要的数据(JSON)即可

3.6 _bulk 批量操作

进入之前的kibana进行操作

在这里插入图片描述

在DevTools下进行操作,进行一个批量操作,数据从gitee获得,如下图

在这里插入图片描述

结果如下

在这里插入图片描述

4、进阶检索

4.1 Search

ES 支持两种基本方式检索:

  • 1.通过使用 REST request URI 发送搜索参数(uri+检索参数)
  • 2.通过使用 REST requestbody 来发送它们(uri+请求体)
GET bank/_search?q=*&sort=account_number:asc

2.这种方式的请求体为Query DSL( Elastisearch 提供的一个可以执行查询的 Json 风格的 DSl (domain-specific language 领域特定语言) )

GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "desc"   //排序规则
      }
    }
  ],
  "from": 0,		//from与size类似于分页操作,从几开始,拿多少个
  "size": 5,		
  "_source": ["balance","firstname"]		//选定显示字段,默认全部显示
}

4.2 match全文检索

全文检索按照评分进行排序,会对检索条件进行分词匹配 。依赖于ElasticSearch本身的倒排索引机制

GET /bank/_search
{
  "query": {
    "match": {
      "address": "Mill Lane"
    }
  }
}

4.3 match_phrase短语匹配

将需要匹配的值当成一个整体单词(不分词)进行检索

GET /bank/_search
{
  "query": {
    "match_phrase": {
      "address": "mill road"
    }
  }
}

4.4 multi_match多字段匹配

GET /bank/_search
{
  "query": {
    "multi_match": {
      "query": "mill",
      "fields": ["address","state"]		//这两个里面出现mill都算,相当于多个模糊查询用or连接
    }
  }
}

4.5 bool复合查询

相当于and将所有条件连接

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "Mill"
          }
        }
      ],
      "must_not": [
        {"match": {
          "age": 28
        }}
      ],
      "should": [
        {"match": {
          "lastname": "Holland"
        }}
      ]
    }
  }
}

可选参数如下

参数 描述
must 必须符合,并增加相关性得分
must_not 必须不符合,不增加相关性得分
should 加分项,如果有则增加相关性得分
filter 和must功能相同,但不贡献相关性得分

4.6 term

和 match 一样,匹配某个属性的值。全文检索字段用 match,非 text 字段匹配用 term。

GET /bank/_search
{
  "query": {
    "term": {
      "age":28
    }
  }
}

4.7aggregations (聚合)

聚合提供了从数据中分组和提取数据的能力。 类似于mysql的分组和聚合函数

GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "ageAgg": {
      "terms": {//年龄范围分布聚合
        "field": "age",
        "size": 100//返回100中情况
      },
      "aggs": {	//基于ageAgg的结果做聚合
        "ageAvg": {
          "avg": {	//求balance的平均值
            "field": "balance"
          }
        }
      }
    }
  }
}

4.8 mapping映射

Mapping是用来定义一个文档 (document), 以及它所包含的属性(field)是如何存储和索引的。

//查看映射
GET bank/_mapping

在这里插入图片描述

(1)创建映射

//创建索引,并创建映射规则
PUT /my_index
{
  "mappings": {
    "properties": {
      "age":{"type": "integer"},
      "name":{"type": "text"}
    }
  }
}

//结果如下
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_index"
}

(2)新增映射

//索引已经建立的情况下,新增映射
PUT /my_index/_mapping
{
  "properties": {
    "employee-id":{
      "type": "keyword",
      "index":false
    }
  }
}

//结果如下
{
  "acknowledged" : true
}

(3)数据迁移

不能修改mapping,只能重新创建索引做数据迁移

//1.创建新索引和映射规则
PUT /newbank
{
  "mappings": {
    "properties": {
      "account_number": {
        "type": "long"
      },
      "address": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "balance": {
        "type": "long"
      },
      "city": {
        "type": "keyword"
      },
      "email": {
        "type": "keyword"
      },
      "employer": {
        "type": "keyword"
      },
      "firstname": {
        "type": "text"
      },
      "gender": {
        "type": "keyword"
      },
      "lastname": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "state": {
        "type": "text"
      }
    }
  }
}

//2.数据迁移,新版本没有类型的用下面的方式,如果是旧版本有类型的迁移要指定旧版本的迁移
POST _reindex
{
  "source": {
    "index": "bank"
  },
  "dest": {
    "index": "newbank"
  }
}

猜你喜欢

转载自blog.csdn.net/qq_41596568/article/details/106413887