day5 es-1

es-day01

1. 认识es

含义:elasticsearch是一款非常强大的开源搜索引擎,可以用来做海量数据的搜索、日志的统计分析、数据监控等

  • 掌握

2. ELK-掌握

  • es
  • logstack-beats替换
  • kibana

2. es的基本概念

1. 倒排索引和正向索引是什么-面试题
  • 正向索引:通过id查询数据
    倒排索引:通过数据查询id
2. 基本概念-重点掌握
  • 文档-es中存储的一行记录就是一个文档
  • 词条:按照语义进行拆分得到的单词就是词条
3. es中的基本组成-重点掌握
    1. 索引库-类似于mysql的表
    1. mapping 映射-类似于表的约束
    1. 文档:一行记录
    1. 字段:表的列
    1. DSL :MYSQL SQL
4. 使用场景
    1. es -海量数据的搜索、日志的统计分析、数据的监控
    1. mysql - 数据需要保证安全性和一致性-使用事务
    1. redis - 高并发 高性能

3. 软件的安装

1. es-版本一定要是7.12.1
2. kibana
3. 安装ik分词器
    1. 安装
    1. 分词器-重点掌握
    • ik_smart

      • 粗粒度分词-得到的词条很少
      • 在需要得到更加精准的数据的时候使用
    • ik_max_word

      • 细粒度分词-得到的词条很多
      • 在需要得到更多的数据的是时候使用

4. 索引的dsl操作-重点掌握

1. 创建索引库
PUT /itcast
{
  "mappings": {
    "properties": {
      "age":{
        "type": "integer"
      },
      "weight":{
        "type": "float"
      },
      "isMarried":{
        "type": "boolean"
      },
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "score":{
        "type": "float"
      },
      "name":{
        "type": "object", 
       "properties": {
          "firstName":{
            "type":"keyword"
          },
          "lastName":{
            "type":"keyword"
          }
        }
      }
    }
  }
}
2. 查询索引
  • GET /heima

3. 更新索引

  • 注意事项:索引一旦被创建现有的字段就不能被修改只能新增字段
PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}
4. 删除索引
  • DELETE /heima
索引库操作有哪些?
  • 创建索引库:PUT /索引库名
  • 查询索引库:GET /索引库名
  • 删除索引库:DELETE /索引库名
  • 添加字段:PUT /索引库名/_mapping

5. 文档的dsl操作-重点掌握

1. 新增文档
# 添加文档
POST /itcast/_doc/1
{
  "age":22,
  "weight":50,
  "isMarried":false,
  "info":"青春",
  "email":"1222@cm",
  "score":[99,94,98],
  "name":{
    "firstName":"奋斗",
    "lastName":"成都"
  }
}
2. 查询文档
  • GET /heima/_doc/1
3. 删除文档
  • DELETE /heima/_doc/1
4. 修改文档
    1. 全量更新-不推荐使用
PUT /{索引库名}/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}
    1. 增量更新-推荐使用
POST /{索引库名}/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}
文档操作有哪些?
  • 创建文档:POST /{索引库名}/_doc/文档id { json文档 }
  • 查询文档:GET /{索引库名}/_doc/文档id
  • 删除文档:DELETE /{索引库名}/_doc/文档id
  • 修改文档:
    • 全量修改:PUT /{索引库名}/_doc/文档id { json文档 }
    • 增量修改:POST /{索引库名}/_update/文档id { “doc”: {字段}}

6. Java 操作ES-重点掌握

6.1 操作索引库
1. 索引的分析和创建
    1. id属性keyword类型
    1. 坐标使用的是geo_point
    1. 为了提交查询的速度尽可能的使用单列查询不要使用多列
      1. 创建一个逻辑字段
      1. 把需要分词的字段的词条拷贝到逻辑字段

image-20220925173545792

2. 初始化高级别的api的客户端
    @BeforeEach
    public void BeforeClient() {
        client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://1.120.45.34:9200")
        ));
    }
3. 创建索引
    1. 通过客户端获取操作索引的核心对象并调用create方法创建索引
    • 易错点:调用方法的时候一定不要调用到过时的方法
    1. 准备create方法需要的request对象,需要设置索引的名称
    1. 给request对象设置mapping映射
//准备request
CreateIndexRequest request = new CreateIndexRequest("qincun");
//准备参数
request.source(CREATE_MAPPING, XContentType.JSON);
//发送请求
client.indices().create(request, RequestOptions.DEFAULT);
4. 删除索引
//准备request
DeleteIndexRequest request = new DeleteIndexRequest("qincun");
//发送请求
client.indices().delete(request, RequestOptions.DEFAULT);
5. 判断索引是否存在
//准备request
GetIndexRequest request = new GetIndexRequest("qincun");
//发送请求
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
6.2 文档的操作
1. 新增文档
//数据库查询数据
Hotel hotel = service.getById(56201L);
//文档类型转换
HotelDoc hotelDoc = new HotelDoc(hotel);
//准备request
IndexRequest request = new IndexRequest("qincun").id(hotel.getId().toString());
//准备参数
request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
//发送请求
client.index(request, RequestOptions.DEFAULT);
2. 查询文档
  • GetResponse response = client.get(request, RequestOptions.DEFAULT)
  • String json = response.getSourceAsString();
3. 修改文档
全量修改

全量修改与新增的API完全一致,判断依据是ID:

  • 如果新增时,ID已经存在,则修改
  • 如果新增时,ID不存在,则新增
//数据库查询数据
Hotel hotel = service.getById(56201L);
//文档类型转换
HotelDoc hotelDoc = new HotelDoc(hotel);
//修改需要改变的数据
hotelDoc.setPrice(288);
hotelDoc.setBrand("青春无限好");
//准备request
IndexRequest request = new IndexRequest("qincun").id(hotel.getId().toString());
//准备参数
request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
//发送请求
client.index(request, RequestOptions.DEFAULT);
增量修改
//准备request
UpdateRequest request = new UpdateRequest("qincun", "56201");
//准备参数
request.doc(
  "brand", "奋斗客栈",
  "city", "杭州",
  "starName", "五星级"
);
//发送请求
client.update(request, RequestOptions.DEFAULT);
4. 删除文档
  • client.delete(request, RequestOptions.DEFAULT)
5. 批量添加文档
//准备request
BulkRequest request = new BulkRequest();
//从数据库批量查询数据
List<Hotel> hotels = service.list();
//遍历进行文档类型转换
HotelDoc hotelDoc = null;
for (Hotel hotel : hotels) {
  hotelDoc = new HotelDoc(hotel);
  request.add(new IndexRequest("qincun")
              .id(hotelDoc.getId().toString())
              .source(JSON.toJSONString(hotelDoc), XContentType.JSON));
}
//发送请求
client.bulk(request, RequestOptions.DEFAULT);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值