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
创建表
在studentinfo(数据库)创建表,表的字段:id、name、age、height、remark、isHealth、类型如下
mysql
在es操作
(这里我就不在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
新增数据
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":"中学生"
}
批量新增
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":"良好四民"}
根据id查询
mysql select * from table where id = 1
在es操作 GET studentinfo/student/1
根据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 修改了"
}
根据id删除
mysql delete from table where id = 1
在es操作 DELETE /studentinfo/student/1
根据条件查询再删除
mysql delete from table where id in (select id from table where name like '%张%')
在es操作 #根据条件去删除
#根据条件去删除
POST /studentinfo/_delete_by_query
{
"query":{
"match": {
"name": "张"
}
}
}
#多字段查询
POST /studentinfo/_search
{
"query": {
"multi_match": {
"query": "四",
"fields": [
"name",
"remark"
]
}
}
}
#精确查询(一般用于查询数字,时间)
#精确查询(一般用于查询数字,时间)
POST studentinfo/_search
{
"query": {
"term": {
"height": {
"value": "1.65"
}
}
}
}
#多个值 精确查询(一般用于查询数字,时间)
#多个值 精确查询(一般用于查询数字,时间)
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"
]
}
}
}
#范围查询
mysql select * from table where age>=25 and age <30
在es操作 #范围查询
#范围查询
POST studentinfo/_search
{
"query": {
"range": {
"age": {
"gte": 25,
"lt": 30
}
}
}
}
#排序 多字段
#排序 多字段
POST studentinfo/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "asc"
}
},
{
"_score": {
"order": "asc"
}
}
]
}
#高亮
#高亮
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
}
#地理查询
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"
}
}
}
}
如果小伙伴们有什么疑问,欢迎下面评论。欢迎指正。