说明:在工作中使用ES已经有段时间,这儿把平时常用的一些操作总结记录下来。

客户端工具:kibana

1.创建索引

dynamic:true 字段可以动态创建,更新数据时可以保存索引中不存在的字段
dynamic:false 更新数据时,字段只能为索引现有字段

PUT /student-001
{
  "mappings": {
    "dynamic": "true",
    "properties": {
      "birthday": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy/MM/dd HH:mm:ss||strict_date_optional_time||epoch_millis"
      },
      "introduce": {
        "type": "text"
      },
      "name": {
        "type": "keyword"
      },
      "sex": {
        "type": "keyword"
      },
      "stu_id": {
        "type": "long"
      }
    }
  }
}

2.别名相关

1)创建别名
POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "student-001",
        "alias": "student"
      }
    }
  ]
}
2)设置索引的is_write_index属性

场景 原来别名索引student 对应真实索引为student-001,但是后面因为业务需求,该索引相关字段类型发生了变化,这时按照新的需求建立了新的索引student-002,对应别名也是student ,此时我们不再需要向student-001写入数据,只向student-002写入数据。

POST /student-001/_aliases/student
{
  "is_write_index":false
}

POST /student-002/_aliases/student
{
  "is_write_index":true
}

3.插入数据

POST /student/_doc
{
  "birthday":"1999-01-01",
  "name":"小明",
  "introduce":"xxxxxxxxxxxxxx....",
  "sex":"男",
  "stu_id":1
}

4.删除数据

删除数据有两种方式,可以根据数据自身id直接删除,也可以根据条件删除

1)根据_id删除
DELETE student/_doc/ieVaE4QBt9FqGj2fyOdD
2)根据条件删除
POST student/_delete_by_query
{
  "query": {
    "term": {
      "name": "小明"
    }
  }
}

5.修改数据

修改数据可以根据id和条件来修改

1)根据_id修改
POST student/_update/OediE4QBt9FqGj2fw1I2
{
  "doc": {
    "sex":"女"
  }
}
2)根据条件修改
POST student/_update_by_query
{
  "query": {
    "term": {
      "name": "小明"
    }
  },
  "script": {
    "source": "ctx._source['sex'] = '男'"
  }
}

6.查询

查询涉及到的知识比较多,有term,terms,match,match_phrase,wildcard等等,这儿简单的列举一种

1)精确查询
GET student/_search
{
  "query": {
    "term": {
      "name": "小明"
    }
  }
}
2)聚合查询

这儿以name字段来分类统计
size:指定数量

GET student/_search
{
   "aggs": {
    "NAME": {
      "terms": {
        "field": "name",
        "size": 10
      }
    }
  }
}
3) 聚合查询-截取聚合字段指定长度值

通过截取name属性前5个字符长度来进行分类统计

GET student/_search
{
 "aggs": {
    "NAME": {
      "terms": {
        "field": "name",
        "size": 10,
        "script": "doc['name'].value.substring(0,5)"
      }
    }
  }
}
4)排重查询

根据某一属性进行拍重查询

GET /student/_search
{
  "collapse": {
    "field": "name"
  }
}

7.添加字段

添加一个int类型的班级id字段

PUT student/_mapping
{
  "properties": {
    "class_id": {
      "type": "integer"
    }
  }
}

8.业务中遇到常用的settings相关设置

1)分类统计数量超长异常相关设置

异常:Trying to create too many buckets. Must be less than or equal to: [65535] but was [65536

PUT /_cluster/settings
{
  "persistent": {
    "search.max_buckets": 100000
  }
}
2)设置索引缓存时间

业务中,进行更新数据操作后,会发现数据没有立即更新,这是因为es会将索引数据进行缓存,根据需求,可以自己设置缓存刷新时间

PUT student/_settings
{
  "refresh_interval": "50ms"
}

未完待续…

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐