ELK学习(五、)

1.聚合操作
2.高亮查询和过滤操作
3.mapping之.dynamic
4. es的mapping之ignore_above

一、聚合操作
聚合操作用到了 agg关键字
可以先用match关键字确定一个大范围 列如搜索男性的平均年龄,可以先设置match为gender;male在使用aggs进行关键词的聚合查询
1.列如查询男性的平均年龄

GET s1/_search
{
  "query": {
    "match":{
      "gender": "male"
    }
  },
  "aggs": {
    "my_sum": {
      "sum": {
        "field": "age"
      }
    }
  }
}

在这里插入图片描述

2.查询所有人年龄总和

GET s1/_search
{
  "aggs":{
    "my_sum":{
      "sum": {
        "field": "age"
      }
    }
  }
}

在这里插入图片描述
3.查询年龄最大值

GET s1/_search
{
  "aggs":{
    "my_max":{
      "max": {
        "field": "age"
      }
    }
  }
}

在这里插入图片描述
4.将年龄进行分组用到range字段函数
4.1对男性年龄进行分段 10-20 20-30 30-100

GET s1/_search
{
  "query": {
    "match": {
      "gender": "male"
    }
  },
  "aggs": {
    "my_group":{
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 10,
            "to": 20
          },
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to":100
          }
        ]
      }
    }
    }
  }

在这里插入图片描述
4.2将年龄进行分组,并求每一个分组中年龄的最大值

GET s1/_search
{
  "query": {
    "match": {
      "gender": "male"
    }
  },
  "aggs": {
    "my_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 10,
            "to": 20
          },
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 100
          }
        ]
      },
      "aggs": {
        "age_max": {
          "max": {
            "field": "age"
          }
        }
      }
    }
  }
}

在这里插入图片描述

二、高亮查询和过滤操作

Elasticsearch如果为搜索引擎服务的时候,会有一部分的网址被颜色渲染,因此需要通过命令来添加高亮操作
在命令中添加highlight关键字
1.最基础的高亮操作

GET s1/_search
{
  "query": {
    "match": {
      "name": "LISI"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }

结果会给指定的数据增加一个标签
在这里插入图片描述
2.为指定的数据增加属性 列如添加颜色和大小

GET s1/_search
{
  "query": {
    "match": {
      "name": "LISI"
    }
  },
  "highlight": {
    "pre_tags": "<b style='color:red;fontsize:20px'>", 
    "post_tags": "</b>", 
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述
3.如果只是给指定的数据一部分添加颜色 则可以在Match关键词处只写要高亮的数据

GET s1/_search
{
  "query": {
    "match": {
      "tags": "沉着"
    }
  },
  "highlight": {
    "pre_tags": "<b style='color:red;fontsize:20px'>", 
    "post_tags": "</b>", 
    "fields": {
      "tags": {}
    }
  }
}

在这里插入图片描述

4.过滤操作
使用source关键字 ,列如查出的文档只想他要里面的个别字段就可以使用source关键字进行查询 查询多个字段可以加中括号

GET s1/_search
{
  "query": {
    "match": {
      "name": "housi"
    }
  },
  "_source": ["name","age"]
}

三、mapping之.dynamic

1.映射(mapping的基本概念)

映射mapping是用来定义一个文档及其包含的字段如何存储和索引的过程。列如我们可以使用映射来定义
哪些字符串应该被视为全文字段
哪些字段包含数字、日期或者地理位置
定义日期格式
自定义规则,用来控制动态添加字段的映射

2.字段的数据类型
简单类型 如文本(text),关键字(keyword),日期(date),整形(long)、双精度(double)、布尔(boolean)
可以是json类型的层次结构性质的类型,如对象和嵌套
特殊类型 如get_point get_shape completion(建议,提示)
大多数数据类型通过field参数支持多字段

3.映射约束
Index.mapping.total_fields.limit 索引的最大子段数目,字段和对象映射以及字段别名都计入此限制,默认值为1000
Index.mapping.depth.limit 字段最大深度,以内部对象的数量来衡量,列如如果所有字段都在根对象级别定义,则深度为1,如果有一个子对象映射,则深度为2默认为20
Index.mapping.nested_fields.limit索引中嵌套字段最大数量默认是50,索引1个包含100个嵌套字段的文档实际上索引101个文档,因为每个嵌套文档都被索引为单独的隐藏文档

4.查询一个文档的映射

GET s1/_mapping

5.创建一个映射关系并插入数据
直接查询一个索引的映射关系,然后创建一个索引将上一个索引的映射复制粘贴

PUT s2
{
  "mappings" : {
      "properties" : {
        "age" : {
          "type" : "long"
        },
        "gender" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "tags" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
PUT s2/_doc/1
{
    "name":"guoailuo",
    "age":24,
    "gender":"famale"
}

6.设置字段类型之后当向索引中多添加一个之后,仍然会增加,不会受到限制
引出以下dynamic有三种状态
1.第一种dynamic=True 会在新增一个字段后建立映射关系,在查询时也可以当作主查询条件查询

PUT s3
{
  "mappings": {
    "dynamic":true,
    "properties": {
      "name":{
        "type": "text"
      }
    }
  }
}

7…当dynamic=false时可以插入一个新的字段但是不会自动为其创建映射,也不能作为主查询来查,只能作为伴随被查询

PUT s4
{
  "mappings": {
    "dynamic":false,
    "properties": {
      "name":{
        "type": "text"
      }
    }
  }
}

在这里插入图片描述
8.当dynamic为strict时 是严格映射模式,创建字段后不允许在插入数据时新增字段不然会报错

PUT s5
{
  "mappings": {
    "dynamic":"strict",
    "properties": {
      "name":{
        "type": "text"
      }
    }
  }
}

在这里插入图片描述
在这里插入图片描述

四、es的mapping之ignore_above

Ignore_above这个参数可以理解为设置的最大插入数据的字节数,如果超过这个最大值,则被不会被索引和查询当作主查询时 但是这个参数只对keyword字段有效
原因如下
text类型:会分词,先把对象进行分词处理,然后再再存入到es中。
当使用多个单词进行查询的时候,当然查不到已经分词过的内容!

keyword:不分词,没有把es中的对象进行分词处理,而是存入了整个对象!
这时候当然可以进行完整地查询!默认是256个字符!

##mapping-ignore_above设置的字段长度
PUT s6
{
  "mappings": {
    "properties": {
      "title":{
        "type": "keyword",
        "ignore_above": 10
      }
    }
  }
}

PUT s6/_doc/1
{
  "title":"专业买手团队全球原产地直采,只为把新鲜送到您的身边"
}

GET s6/_search
{
  "query": {
    "match": {
      "title": "专业买手团队全球原产地直采,只为把新鲜送到您的身边"
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值