目录
ES
window 环境的elasticsearch ik kibana 下载
ES集群3种状态
模拟yellow 状态
副本数量修改
es常用查询json
单字段查询:
排序
多字段查询
指定返回源数据_source
分页:
TERM查询
_analyze 查看分词结果,验证分词:
多条件bool 查询。must must_not should
filter 过滤
minimum_should_match 指定最小匹配
高亮查询:
mapping 简单创建
自动创建mapping,不手动指定
手动指定mapping
聚合查询:
多层聚合查询
ES ik kibana 下载、ES查询、聚合、mapping
window 环境的elasticsearch ik kibana 下载
elasticsearch-7.3.0-windows-x86_64.zip
kibana-7.3.0-windows-x86_64.zip
elasticsearch-analysis-ik-7.3.0.zip
百度网盘地址:
链接:https://pan.baidu.com/s/17BXHicCN63yHdrl4mq16SQ
提取码:s7w4
--来自百度网盘超级会员V3的分享
ES集群3种状态
1、gree :所有副本分片、主分片都正常运行【不能分配到活跃的节点上】,所在节点全部正常(数据完整)
2、yellow :所有主分片正常运行,副本分片存在一个或多个不能正常运行【不能分配到活跃的节点上】(数据完整,并发处理能力相对下降)
3、red :存在一个或多个主分片不能正常运行【不能分配到活跃的节点上】(数据不完整)
模拟yellow 状态
现在节点的状态是green
手动新建一个索引文件,索引文件默认副本是1,所以索引文件learnindex 存储了两份,且相同索引相同分片的副本不能在同一个节点上。所以副本0(边框细的0没能被分配到活跃的节点上)所以状态从green 变成了yellow;
副本数量修改
ES是支持不停机修改副本分片数量的,需要注意的是 分片数量索引一旦创建就不能修改。(原因是因为多个分片数据应该存储在哪个分片中算法是和分片数量有关的)
修改语句:
http://127.0.0.1:9200/learnindex/_settings/
ip+端口+索引名称/_settings (注意要使用put)
参数写 {"number_of_replicas":2}
es常用查询json
数据准备:
PUT people/_doc/1
{
"name":"张三",
"address":"北京市",
"age":44
}
PUT people/_doc/2
{
"name":"李四",
"address":"河南省",
"age":22
}
PUT people/_doc/3
{
"name":"王五",
"address":"郑州市",
"age":54
}
PUT people/_doc/4
{
"name":"张三",
"address":"天津市",
"age":30
}
PUT people/_doc/5
{
"name":"葫芦娃",
"address":"蛇精垌",
"age":40
}
准备数据截图:
单字段查询:
GET /people/_search
{
"query":{
"match": {
"name": "张三"
}
}
}
排序
GET /people/_search
{
"query":{
"match": {
"name": "张三"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
多字段查询
GET /people/_search
{
"query":{
"multi_match": {
"query": "天津",
"fields": ["name","address"]
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
指定返回源数据_source
例如指定只返回姓名和年龄 name,age
GET /people/_search
{
"query":{
"multi_match": {
"query": "天津",
"fields": ["name","address"]
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source":[
"name","age"]
}
分页:
GET /people/_search
{
"query":{
"multi_match": {
"query": "张",
"fields": ["name","address"]
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from":0,"size": 1
}
TERM查询
term查询对你输入的词不会进行分词,上面数据初始化的时候,没有主动指定分词器。所以默认用的es 的standard 分词,会分成 ‘张’ ‘三’存储所以造成了下面截图,输入‘张’可以正常搜索到,输入‘张三'搜索不到的情况。
GET /people/_search
{
"query":{
"term": {
"name": "张"
}
}
}
GET /people/_search
{
"query":{
"term": {
"name": "张三"
}
}
}
_analyze 查看分词结果,验证分词:
可以看到下面使用"standard", 张三会分为 ‘张’ ‘三’, 使用ik 插件的ik_smart 会分为 ‘张三’。
所以上面使用term 查询‘张三’的时候 查询不到内容;
GET /people/_analyze
{
"analyzer":"standard",
"text":"张三"
}
GET /people/_analyze
{
"analyzer":"ik_smart",
"text":"张三"
}
多条件bool 查询。must must_not should
GET /people/_search
{
"query":{
"bool": {
"must": [
{
"term": {
"name": {
"value": "张"
}
}
},{ "term":{"address":{"value":"市"}}}
]
}
}
}
filter 过滤
GET /people/_search
{
"query":{
"bool": {
"must": [
{
"term": {
"name": {
"value": "张"
}
}
},{ "term":{"address":{"value":"市"}}}
],"filter": {"range": {
"age": {
"gte": 10,
"lte": 40
}
}}}
}
}
minimum_should_match 指定最小匹配
相同查询语句,指定minimum_should_match 为1,查询有3条,指定minimum_should_match 为2 ,查询结果有2条
GET /people/_search
{
"query":{
"bool": {
"should": [
{
"term": {
"name": {
"value": "张"
}
}
},
{ "term":{"address":{"value":"市"}}}
],
"minimum_should_match": 1}
}
}
高亮查询:
GET /people/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"name": {
"value": "张"
}
}
},
{
"term": {
"address": {
"value": "市"
}
}
}
],
"minimum_should_match": 1
}
},
"highlight": {
"fields": {
"name": {
"pre_tags": "",
"post_tags": ""
}
}
}
}
mapping 简单创建
自动创建mapping,不手动指定
PUT testmapping/_doc/1
{
"nameString":"李四",
"address":"河南省",
"age":22,
"shuzhi":33.42334,
"booleType":true,
"dataType":"2021-11-09"
}
查看自动生成的mapping,发现es 可以识别常见的类型并自动设置mapping,
字符串->text
数值->long
"2021-11-09" ->date
22.33 -> float
手动指定mapping
PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_smart",
"index": true
},
"address": {
"type": "text",
"analyzer": "ik_smart",
"index": true
},
"agg":{
"type":"integer"
},
"dateType":{
"type":"date"
}
}
}
}
指定ik_smart 后上面使用‘张三’查询不到的情况 ,现在就可以查到了,因为 张三 智能分词分出来的为张三。
聚合查询:
支持聚合查询的字段需要设置 fielddata=true ;否则会有以下报错信息
按照名称聚合:
GET /test4/_search
{
"query": {
"match_all": {}
},
"aggs": {
"learnAgg": {
"terms": {
"field": "name"
}
}
},"size": 0
}
多层聚合查询
多层聚合按照名称聚合后求年龄的和:
GET /test4/_search
{
"query": {
"match_all": {}
},
"aggs": {
"learnAgg": {
"terms": {
"field": "name"
},"aggs": {
"countage": {
"sum": {
"field": "agg"
}
}
}
}
},"size": 0
}



