Elasticsearch6.2.4基础概念

ES基础概念:
node:
节点,部署es程序的服务器
cluster:
集群,多个节点组成的架构
shard:
索引分片,索引可以被设置为多个分片
replicas:
索引副本
index:
索引,相当于关系型数据库的database
type:
类型,对应于关系型数据库的table
mapping:
映射关系,相当于数据库中的表结构
document:
文档,类似于关系型数据库的row

查询文档时的三元素
_index:文档对应的索引
_type:文档对应的数据类型
_id:文档的唯一ID

示例:GET /hxcar/car/1
	 GET /_index/_type/_id
	 用es的话说表示:查询_index索引为hxcar的,_type为car的,_id为1的document。
	 用数据库的话说表示:查询数据库名为hxcar的,表为car的,id列为1的信息。

ES命令分类
索引管理:
创建,配置,删除索引
文档关系:
创建,修改,删除文档
数据查询:
空查询
指定索引查询,指定类型查询
请求体查询(过滤查询,匹配度查询)

ES请求方式
GET:
数据查询
POST(适合添加操作,应为可以不指定document可以参考最后的代码块):
数据查询,数据新增,数据修改
PUT(创建索引只能用PUT):
数据新增,数据修改
DELETE:
数据删除

索引管理

#创建一个yjw的索引(数据库表示:创建一个yjw的数据库)
PUT yjw
{
  "settings": {
  	#副本数
    "number_of_replicas": 1,
    #分片数
    "number_of_shards": 5
  },
  "mappings": {
  	#创建yjw下的一个type为user(数据库表示:在yjw库中创建user表)
    "user": {
      "properties": {
      	#创建name字段类型为text,并指定分词为ik_smart分词器
        "name": {
          "type": "text",
          "analyzer": "ik_smart"
        },
        #创建sex字段类型为text
        "sex":{
          "type": "text"
        }
      }
    }
  }
}

数据类型
5.x版本取消掉string
在这里插入图片描述
在这里插入图片描述
分词器类型
在这里插入图片描述
StandardAnalyzer默认分词器不支持中文分词,因此需要中文全文检索时需要配置中文分词器例如:IK分词器

数据查询

查询结果分析:
took:搜索耗时,单位毫秒
_shards:查询中参数与分片的总数,以及这些分片成功和失败的个数
time_out:表示查询是否超时
hist:查询出的结果集,数据为json格式

请求体查询:
请求体查询一般使用query子句进行实现。
直接放倒query体会进行打分操作。
查询分类:
过滤查询:
对文档进行匹配,不分词,常用filter+其他子句实现
匹配度查询:
对文档进行匹配并打分,分词,常用macth子句实现
query体查询子句
match子句
term子句
range子句
#term匹配查找
#range范围查找
示例:见底图。
组合查询
定义:同时对多个字段进行匹配检索,并且根据一系列的标准过滤的复合查询。
实现方式:bool子句
bool子句:must,must_not,should,filter
must:文档必须匹配这些条件才能被包含进来
must_not:文档必须不匹配这些条件才能被包含进来
should:如果文档满足should内的条件,将为改文档增加_score,否则无任何影响
filter:使用过滤模式来进行查询
分页查询
from:开始,size:页大小

小结:
		node(节点),cluster(集群),index(索引),type(表),document(文档),shard(索引分片),replicas(索引副本)
		ex查询三要素:_index,type,_id
		es常用命令:索引操作,文档操作,数据查询操作
		查询请求体:query
				  精准查询:term,terms(去查找匹配的值没有分词这个概念,即:_score = 1)
						get yjw/car/_search
						{
  							"query":{
  								#term:"term":{"loginName":"admin"}
  								"terms":{"loginName":["ad","admin"]}
  							}
						}
				  匹配度查询:match(该查询有分词这个概念会对条件值进行分词,后去查询匹配的值,即:_score != 1)
				  	 	get yjw/car/_search
						{
  							"query":{
  								#分词为蒙迪欧,领克03进行匹配
  								"match":{"series":"蒙迪欧 领克03"}
  							}
						}
				  范围查询:range
				 		get yjw/car/_search
						{
  							"query":{
  								#gte,lte包含11和33	gt,lt不包含
  							    "range":{"price":{"gte":11,"lte": 33}
  							}
						}
				  组合查询:bool
				  	过滤查询:filter(不计算相关性也就是不进行打分,可以做cache,查询快于query,放入query块里的会进行打分操作,所以在filter子句上加了一个bool)
						{"query":{"bool":{"filter":[{"term":{"carType":"跑车"}},{"range":{"price":{"gte":30,"lte":50}}}]}}}
				  	匹配查询:must(相当于数据库中的and)
				  		{"query":{"bool":{"filter":[{"term":{"carType":"跑车"}},{"range":{"price":{"gte":30,"lte":50}}}],"must_not":[{"term":{"year":"2017"}},{"term":{"changeOwner":"false"}}],"must":[{"term":{"year":"2020"}},{"term":{"changeOwner":"true"}}]}}}
				  	不匹配查询:must_not(相当于数据库中的not)
				  		{"query":{"bool":{"filter":[{"term":{"carType":"跑车"}},{"range":{"price":{"gte":30,"lte":50}}}],"must_not":[{"term":{"year":"2017"}},{"term":{"changeOwner":"false"}}],"must":[{"term":{"year":"2020"}},{"term":{"changeOwner":"true"}}]}}}
				  	或匹配查询:should(相当于数据库中的or)
				  		{"query":{"bool":{"filter":[{"term":{"carType":"跑车"}},{"range":{"price":{"gte":30,"lte":50}}}],"must_not":[{"term":{"year":"2017"}},{"term":{"changeOwner":"false"}}],"must":[{"term":{"year":"2020"}},{"term":{"changeOwner":"true"}}],"should":[{"term":{"year":"2019"}},{"term":{"changeOwner":"true"}}]}}}
				  排序:sort
						{
  							"query":{term:"term":{"loginName":"admin"}},
						    "sort": {"createTime":{"order":"desc"}}
						}	
				  非空查询:exists:field
				  		{"query":{"exists":{"field":"areaCode"}}}
示例:

#查询所有
GET _search

#ik分词器的两种方式
#穷举的方式
GET _analyze
{
  "text": "中华人民共和国中央政",
  "analyzer": "ik_max_word"

}
#智能的方式
GET _analyze
{
  "text": "中华人民共和国中央政",
  "analyzer": "ik_smart"

}

#查询已创建的索引
GET /_cat/indices?v

#删除索引
DELETE yjw

#添加索引只能用PUT
PUT /yjw
{
  "settings": {
    "number_of_replicas": 0,
    "number_of_shards": 5
  },
  "mappimgs": {
    "user": {
      "properties": {
        "name": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "age": {
          "type": "integer"
        },
        "address": {
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}

#增加字段的方法
PUT 索引/_mapping/type
{
  "properties":{
          "tsCount":{
             "type":"integer"
          },
         "dyCount": {
              "type": "integer"
          }
  }
}


#PUT不接受不带document(01)的语法,这就是PUT和POST的区别
PUT /yjw/user/01
{
  "name":"yjw",
  "age":222,
  "address":"州"
}
POST /yjw/user
{
  "name":"yjw",
  "age":222,
  "address":"杭州"
}

#根据index/type/document查询具体的行
GET /yjw/user/01
#根据index/type/document删除
DELETE /yjw/user/01
#根据index/type/查询所有
GET /yjw/user/_search

#直接放倒query体会进行打分操作,filter没有这个功能所以不能放到query体里
#term匹配查找
#range范围查找
#过滤查询
GET /yjw/user/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }
  }
}
#匹配度查询
GET /yjw/user/_search
{
  "query": {
    "match": {
      "address": "杭"
    }
  }
}
#复合查询
GET /yjw/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "address": "杭"
          }
        }
      ], 
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 2000
          }
        }
      }
    }
  }
}
#分页查询
GET /yjw/user/_search
{
  "from": 0,
  "size": 1, 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "address": "杭"
          }
        }
      ], 
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 2000
          }
        }
      }
    }
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值