learning_record_doc/elk/elasticsearch/基础ES-DSL语句.md
2023-01-04 23:44:03 +08:00

5.0 KiB
Raw Permalink Blame History

基础索引库、文档ES-DSL语句

[TOC]

基础概念

我们把mysql与elasticsearch的概念做一下对比

MySQL Elasticsearch 说明
Table Index 索引(index),就是文档的集合,类似数据库的表(table)
Row Document 文档Document就是一条条的数据类似数据库中的行Row文档都是JSON格式
Column Field 字段Field就是JSON文档中的字段类似数据库中的列Column
Schema Mapping Mapping映射是索引中文档的约束例如字段类型约束。类似数据库的表结构Schema
SQL DSL DSL是elasticsearch提供的JSON风格的请求语句用来操作elasticsearch实现CRUD

是不是说我们学习了elasticsearch就不再需要mysql了呢

并不是如此,两者各自有自己的擅长支出:

  • Mysql擅长事务类型操作可以确保数据的安全和一致性

  • Elasticsearch擅长海量数据的搜索、分析、计算

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作使用mysql实现
  • 对查询性能要求较高的搜索需求使用elasticsearch实现
  • 两者再基于某种方式,实现数据的同步,保证一致性

基础语法

索引基础语法

  • 创建索引库PUT /索引库名
  • 查询索引库GET /索引库名
  • 删除索引库DELETE /索引库名
  • 添加字段:
    • PUT /索引库名/_mapping
    • POST /索引库名/_mapping

文档基础语法

  • 创建文档POST /{索引库名}/_doc/文档id { json文档 }
  • 查询文档GET /{索引库名}/_doc/文档id
  • 删除文档DELETE /{索引库名}/_doc/文档id
  • 修改文档:
    • 全量修改 (如果索引库中不存在则新增)PUT /{索引库名}/_doc/文档id { json文档 }
    • 局部修改(如果索引库中不存在则修改失败)POST /{索引库名}/_update/文档id { "doc": {字段}}

示例

#分词器
#默认分词器
GET _analyze
{
  "analyzer": "standard", 
  "text": "hello world"
}

#ik_max_word ik分词器-细粒度
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "我是云南的嘤嘤怪,你是大傻逼还是大聪明"
}
#ik_smart ik分词器-粗粒度
GET _analyze
{
  "analyzer": "ik_smart",
  "text": "我是云南的"
}
#ik_max_word
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "我是云南的嘤嘤怪,你是大傻逼还是大聪明"
}

# 索引库操作
#新增索引
PUT /heima
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "properties": {
          "firstName":{
            "type":"keyword"
          },
          "lastName":{
            "type":"keyword"
          }
        }
      }
    }
  }
}

#查询索引
GET /heima

#修改索引(为索引新增加字段)
POST /heima/_mapping
{
  "properties":{
    "name2":{
      "type":"keyword"
    }
  }
}
#修改索引(为索引新增加字段)
PUT /heima/_mapping
{
  "properties":{
    "name3":{
      "type":"keyword"
    }
  }
}
#删除索引
DELETE /heima

#文档操作
#新增文档
POST /heima/_doc/1
{
  "info":"大聪明JAVA程序员",
  "email":"2111319672@qq.com",
  "name":{
    "firstName":"代",
    "lastName":"帅"
  },
  "name2":"大聪明"
}


#查询文档
GET /heima/_doc/1

#删除文档
DELETE /heima/_doc/1

#全量修改
PUT /heima/_doc/1
{
  "info":"大聪明JAVA程序员",
  "email":"2111319672@qq.com",
  "name":{
    "firstName":"代",
    "lastName":"帅"
  },
  "name2":"大聪明"
}

#局部修改
POST /heima/_update/1
{
  "doc": {
    "email":"dcm@qq.com",
    "name":{
      "firstName":"大",
      "lastName":"聪明"
    }
  }
}
#常见字段演示
# location地理坐标里面包含精度、纬度
# all一个组合字段其目的是将多字段的值 利用copy_to合并提供给用户搜索
PUT /hotel
{
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "name":{
        "type": "text",
        "analyzer": "ik_max_word",
        "copy_to": "all"
      },
      "address":{
        "type": "keyword",
        "index": false
      },
      "price":{
        "type": "integer"
      },
      "score":{
        "type": "integer"
      },
      "brand":{
        "type": "keyword",
        "copy_to": "all"
      },
      "city":{
        "type": "keyword",
        "copy_to": "all"
      },
      "starName":{
        "type": "keyword"
      },
      "business":{
        "type": "keyword"
      },
      "location":{
        "type": "geo_point"
      },
      "pic":{
        "type": "keyword",
        "index": false
      },
      "all":{
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}