elasticSearch数据库和mysql数据库的差异

mysql                               ======》                     elasticSearch  

数据库(database)            在es叫做                      (索引数据库) index    

表(table)                     在es叫做                      (类型) type   

行(row)                       在es叫做                      (文档) document   

列(column)                 在es叫做                      (字段)field 

表结构                            在es叫做                      (映射) _mapping    

操作之前,要先安装elasticsearch 数据库,再安装kibana,不知道怎么安装? 点我试试

创建数据库

mysql                 create databse studentinfo            

在es操作                PUT /studentinfo                                                                

es 多表join es建表语句_es 多表join

创建表

在studentinfo(数据库)创建表,表的字段:id、name、age、height、remark、isHealth、类型如下

mysql           

es 多表join es建表语句_分页_02

                 

在es操作                            

 

es 多表join es建表语句_分页_03

               

(这里我就不在mysql去创建表了)                      type:类型,可以是text、long、short、date、integer、object等

                                                                              index:是否索引,默认为true

                                                                              store:是否存储,默认为false

                                                                              analyzer:分词器,这里的ik_max_word即使用ik分词器

查看表字段

mysql            desc table                                                  

在es操作         GET studentinfo/_mapping/student                            

es 多表join es建表语句_字段_04

es 多表join es建表语句_mysql_05

新增数据

mysql                 insert into table value ('','','')                      

在es操作              # 插入数据(不指定id,这里的id指的是es的_id,唯一)

# 插入数据(不指定id)
POST studentinfo/student
{
  "id":"1",
  "name":"张三",
  "age":"15",
  "height":"1.45",
  "isHealth":true,
  "remark":"中学生"
}

es 多表join es建表语句_mysql_06

es 多表join es建表语句_字段_07

批量新增

mysql                      INSERT INTO testTable (xx,xx) VALUES ('xx','xx'),('xx','xx'),('xx','xx')          

在es操作                 #批量新增(注意这里格式必须要格式化一下,kibana 快捷键ctrl + i ,不然会报错)

#批量新增
POST /studentinfo/student/_bulk
{"index":{}}
{"name":"李四","age":"28","height":"1.65","isHealth":true,"remark":"社会打工人"}
{"index":{}}
{"name":"王五","age":"37","height":"1.75","isHealth":true,"remark":"管理人员"}
{"index":{}}
{"name":"赵六","age":"24","height":"1.65","isHealth":true,"remark":"大学毕业时"}
{"index":{}}
{"name":"田七","age":"24","height":"1.65","isHealth":true,"remark":"良好四民"}

es 多表join es建表语句_elasticsearch_08

根据id查询

mysql                          select * from table where id = 1               

在es操作                     GET studentinfo/student/1      

es 多表join es建表语句_elasticsearch_09

根据id修改 (没有就新增)

mysql                     update table set xxx where id = 1             

在es操作                    #修改 (没有即新增)                                               

#修改 (没有即新增)
PUT studentinfo/student/1
{
  "name":"张三指定id修改,这里注意看 _version 乐观锁机制 加1 ",
  "age":"251",
  "height":"2.45",
  "isHealth":false,
  "remark":"中学生指定id 修改了"
}

es 多表join es建表语句_mysql_10

根据id删除

mysql                                 delete from table where id = 1                   

在es操作                             DELETE /studentinfo/student/1

es 多表join es建表语句_分页_11

根据条件查询再删除

mysql                                      delete from table where id in (select id from table where name like '%张%')                   

在es操作                                  #根据条件去删除

#根据条件去删除
POST /studentinfo/_delete_by_query
{
  "query":{
    "match": {
      "name": "张"
    }
  }
}

es 多表join es建表语句_es 多表join_12

es 多表join es建表语句_mysql_13

#多字段查询

POST /studentinfo/_search
{
  "query": {
    "multi_match": {
      "query": "四",
      "fields": [
        "name",
        "remark"
      ]
    }
  }
}

#精确查询(一般用于查询数字,时间)

es 多表join es建表语句_字段_14

#精确查询(一般用于查询数字,时间)
POST studentinfo/_search
{
  "query": {
    "term": {
      "height": {
        "value": "1.65"
      }
    }
  }
}

#多个值  精确查询(一般用于查询数字,时间)

es 多表join es建表语句_分页_15

#多个值  精确查询(一般用于查询数字,时间)
POST studentinfo/_search
{
  "query": {
    "terms": {
      "height": [
        "1.75",
        "1.65"
      ]
    }
  }
}

#查询指定字段

mysql                                   select id,name,height,xxx from table                       

在es操作                               #查询指定字段

#查询指定字段
POST studentinfo/_search
{
  "_source": ["name","remark","height"], 
  "query": {
    "terms": {
      "height": [
        "1.75",
        "1.65"
      ]
    }
  }
}

es 多表join es建表语句_elasticsearch_16

#范围查询

mysql                               select * from table where age>=25 and age <30                       

在es操作                           #范围查询

#范围查询
POST studentinfo/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 25,
        "lt": 30
      }
    }
  }
}

es 多表join es建表语句_mysql_17

#排序 多字段

es 多表join es建表语句_mysql_18

#排序 多字段
POST studentinfo/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    },
    {
      "_score": {
        "order": "asc"
      }
    }
  ]
}

#高亮

es 多表join es建表语句_分页_19

#高亮
POST studentinfo/_search
{
  "query": {
    "match": {
      "name": "四"
    }
  },
  "highlight": {
    "pre_tags": "<b color='red'",
    "post_tags": "<b>",
    "fields": {
      "name": {}
    }
  }
}

#分页  分页公式:int start = {pageNum-1}*size

mysql                           select * from table limit 2,2                       

在es操作                      #分页  分页公式:int start = {pageNum-1}*size

#分页  分页公式:int start = {pageNum-1}*size
POST studentinfo/_search
{
  "query": {
    "match_all": {}
  },
  "from": 2,
  "size": 2
}

es 多表join es建表语句_mysql_20

#地理查询

mysql     select * from xx where  a between 10.2  and  30.3

在es操作        

公式1: (不常用  根据两个点画出矩形,查询这个矩形内的所有东西)
GET /indexName/_search
{
    "query":{
        "geo_bounding_box":{
            "FIELD":{
                "top_left":{
                    "lat":22.2,
                    "lon":33.3
                },
                "bottom_right":{
                    "lat":44.4,
                    "lon":55.5
                },
            }
        }
    }
}

公式2: (常用  以自己为中心,画出5km的半径,然后画一个圆 搜索圆里面的内容 )
GET /indexName/_search
{
    "query":{
        "geo_distance":{
            "FIELD":{
                "distance":"5km"
                "FIELD":"11.1,22.2"
            }
        }
    }
}

 如果小伙伴们有什么疑问,欢迎下面评论。欢迎指正。