关于elasticsearch索引的操作命令(核心概念、操作语句及分页)

文章目录

    • 一、put、post、delete、get方法描述
    • 二、数据模型及核心概念
    • 三、索引的基本操作
      • 1.创建一个索引
      • 2.查看当前所有索引
      • 3.修改(更新)文档
      • 4.删除
      • 5.添加数据
      • 6.批量操作数据 bulk
      • 7.批量读取文档
      • 8.搜索数据
    • 四、分页
      • 1.浅分页(from+size)
      • 2.深分页

一、put、post、delete、get方法描述

method 描述
PUT 创建
POST 创建、修改
DELETE 删除
GET 查询

二、数据模型及核心概念

①数据模型
Index:索引,由多个Document组成 ,相当于关系型数据库中的数据库(database)
Type:索引类型,6.x中仅支持一个,以后将逐渐被移除,相当于关系型数据库中的表(tables)
Document:文档,由多个Field组成,相当于关系型数据库中的行(rows)
Field:字段,包括字段名与字段值,相当于关系型数据库中的字段(columns)
②Document管理:文档是ES最小数据单元

  • 原始数据
    _source:原始JSON格式文档
  • 文档元数据
    _index:索引名
    _type:索引类型
    _id:文档编号
    _version:文档版本号用于并发控制
    _score:在搜索结果中的评分

三、索引的基本操作

注意:索引前面的/可加可不加

1.创建一个索引

PUT /索引名/类型名/文档id {请求体}
例如:
PUT test/type/1
{
  "name":"tom",
  "interest":"play"
}

2.查看当前所有索引

GET _cat/indices

关于elasticsearch索引的操作命令(核心概念、操作语句及分页)_第1张图片

3.修改(更新)文档

方法一:(如果不传递值就会被覆盖)

#相同文档id提交可以实现覆盖完成修改
PUT /test/type/1
{
  "name":"tom",
  "interest":"learn"
}

方法二:(只需编辑更新的数据,灵活性更高)

POST /test/type/1/_update
{
  "doc": {
  "interest":"dance"
  }
}

4.删除

#删除指定编号文档
DELETE test/type/1
#删除整个索引
DELETE test

5.添加数据

PUT test/type/1
{
  "name":"tom",
  "interest":"learn",
  "gender":"male",
  "age":"18"
}

6.批量操作数据 bulk

#批量操作步骤
PUT _bulk
{"index/create/update/delete":{"_index":"...","_type":"...","_id":"..."}}
{"field1":"value1",……}
#以插入数据为例
PUT _bulk
{"create":{"_index":"student01","_type":"student","_id":"1"}}
{"id":"1","name":"zhangsan","join_date":"2014","interest":"basketball"}
{"create":{"_index":"student01","_type":"student","_id":"2"}}
{"id":"2","name":"join","join_date":"2017","interest":"boxing"}
{"create":{"_index":"student01","_type":"student","_id":"3"}}
{"id":"3","name":"John Kerry","join_date":"2016","interest":"cooking"}

7.批量读取文档

方式一:

GET student01/student/_mget
{"docs":[{"_id":"1"},{"_id":"2"}]}

方式二:

GET student01/_mget
{"docs":[{"_type":"student","_id":"1"},{"_type":"student","_id":"2"}]}

方式三:(可读取不同索引的表)

GET _mget
{"docs":[{"_index":"student01","_type":"student","_id":"1"},{"_index":"test","_type":"type","_id":"1"}]}

8.搜索数据

1)简单查询
①搜索指定编号的数据

GET test/type/1/

②带条件的查询(当索引中含有多条数据时)

GET test/type/_search?q=name:tom

2)复杂查询
①match查询

  • match_all:返回所有文档
GET test/_search
{
    "query": {
        "match_all": {}
    }
}
  • match:布尔匹配查询(对查询字符串进行分词,根据分词结果构造布尔查询)
GET student01/_search
{
    "query": {
        "match": {
          "name":"John Kerry"
        }
    }
}
  • match_phrase:短语匹配查询(对查询字符串进行分词,字段值必须依次匹配所有分词,注意各分词位置不能改变)
GET student01/_search
{
    "query": {
        "match_phrase": {
          "name":"John Kerry"
        }
    }
}
  • match_phrase_prefix:短语前缀匹配查询(类似match_phrase,但最后一个分词作为前缀匹配)
GET student01/_search
{
    "query": {
       "match_phrase_prefix": {
          "name":"John Ke"
        }
    }
}
  • multi_match:多字段匹配查询
GET student01/_search
{
     "query": {
        "multi_match": {
          "query": "John like cooking",
          "fields": ["name","interest"]
        }
    }
}

②term查询 (词条查询:按照存储在倒排索引中的确切字词,对字段进行匹配)

GET student01/_search
{
     "query": {
         "term":{
          "name":"john"    #注意值全部为小写
        }
    }
}

③terms查询 (词条查询:按照存储在倒排索引中的确切字词,对字段进行多词条匹配)

GET student01/_search
{ "query": {
        "terms":{
          "name":["john","da"]   #注意值全部为小写
        }
    }
}

④range查询 (范围查询)

gt 大于
gte 大于等于
lt 小于
lte 小于等于!

GET student01/_search
{"query": {
     "range" : {
            "join_date" : {
                "gte" : 2016,
                "lte" : 2017
            }
        }
    }
}

⑤fliter过滤器(filter是放在bool查询中的)

GET student01/_search
{"query": {
  "bool": {
  "filter": {
     "range": {
        "join_date": {
          "gte": 2016
        }
      }
  }
  }
}
}

⑥sort排序

GET student01/_search
{"query": {
  "match_all": {
  }
  },
  "sort": {
    "id":"desc"
  }
}

⑦bool查询(复合查询子句)

  • List itemmust 相当于sql查询where里面的and,所有的条件都要符合 where name = join and interest = xxx
  • should 相当于sql查询where里面的or,所有的条件都要符合 where name = 1 or interest = xxx 【minimum_should_match 表示最小匹配的should条件】
  • should 相当于sql查询where里面的 not
#请在学生信息索引“student01”中查询同时满足以下要求的文档
#姓名为“john”
#在2016年后入学
#爱好“boxing”
GET student01/student/_search
{"query":{
  "bool": {
    "must": [
      {"match": {
      "name.keyword": "join"
    }},{
      "match": {
        "interest": "boxing"
      }
    }
    ],
    "filter": {
      "range": {
        "join_date": {
          "gte": 2016
        }
      }
    }
  }
}
}

四、分页

1.浅分页(from+size)

方法一:size:页面容量 from:数据下标是从0开始的,表示从第几个数据开始

GET student01/_search?size=5&from=2

方法二:

GET student01/_search
{
  "query": {
    "match_all": {}
  },
  "size": 5,
  "from": 2
}

2.深分页

①返回scroll_id与第一页内容,scroll_id 5分钟有效

GET stu/_search?scroll=5m
{
  "from": 0,
  "size": 5,
  "query": {"match_all": {}}
}

②根据scroll_id不断获取下一页内容

GET _search/scroll
{
  "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAANy……",
  "scroll": "5m"
}

你可能感兴趣的:(ELK集群)