当前位置:   article > 正文

Elasticsearch&Kibana基本操作_kibana :动态映射模板

kibana :动态映射模板

操作索引库

创建索引库

PUT 索引库名
  • 1

查看索引库

GET 索引库名
  • 1

删除索引库

DELETE 索引库名
  • 1

在这里插入图片描述

操作映射关系

创建映射

PUT 索引库名/_mapping/映设类型名称 
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
首先就是创建时候的映设类型名称
  1. 在ES5.X版本中是可以在同一个索引库下添加多个映射类型的,每个映射类型相当于索引库来说就类似于MySQL中的数据库和表
  2. 从ES6.X开始不允许在同一个索引中添加多个映射类型
  3. 从ES5.X升级到ES6.X的多个映射类型会被保留但是通过API来创建的话就只允许一个映射类型
  4. 在ES7.X版本中映射就被废弃了,如果想在ES6升级到ES7还兼容的话,映射类型可以设置为固定的_doc
在这里我们可以看到创建映射时候有几个字段,

type:类型。这个类型有很多种。可以是text、long、short、date、integer、object等
index:是否进行索引,默认是true,如果是true,简单来说就是你可以通过索引来进行查找,但是如果配置成false,你就不可以使用索引查询
store:是否进行存储,默认值为false,是否进行额外的存储的意思
analyzer:使用的分词器是什么

创建映设中属性:类型

我们可以看到官方文档上的内容
在这里插入图片描述
其中String类型又分为俩种;
一种是text类型,一种是keyWord类型

  • text:可分词,不可参与聚合
  • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
    这个比较常用

查看映射

查看某个索引库中的所有类型的映射  
GET /索引库名/_mapping
  • 1
  • 2
如果要查看某个类型映射,可以再路径后面跟上类型名称  
GET /索引库名/_mapping/映射名
  • 1
  • 2

在这里插入图片描述

操作文档

添加修改文档

POST/索引库名/类型/id值
{
   "映设字段名":"内容"
}
  • 1
  • 2
  • 3
  • 4

修改文档

PUT/索引库名/类型/id值
{
   "映设字段名":"内容"
}
  • 1
  • 2
  • 3
  • 4
修改和添加的区别

我们可以看到添加和修改的操作代码是一样的,那我们如区分什么是添加,什么是修改
如果是修改,提示就会出这样的
在这里插入图片描述
这是添加的
在这里插入图片描述
我们可以看到version这里的变化,如果是添加的话,这个版本就是1,如果是修改的话,版本就会依次叠加,并且result的提示也是不一样的

查看文档

GET/索引库名/类型/id值
  • 1

删除文档

DELETE/索引库名/类型/id值
  • 1

在这里插入图片描述

智能判断

我们之前添加的数据都是已经定义过的,那如果添加没有定义过的会不会成功呢
事实上Elasticsearch非常智能,不需要给索引库设置任何mapping映射,它也可以根据输入的数据来判断类型,动态添加数据映射。
但是这里呢,有一个小问题,如果是String类型的,他无法判断你是text还是keyWord,就会创建一个text和text的子映射keyWord,这不是我们需要看到的结果,这里就引出了动态映射模板

动态映射模板

"dynamic_templates": [
    {
      "my_template_name": { 
        ...  match conditions ... 
        "mapping": { ... } 
      }
    },
    ...
  ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • my_template_name:自定义模板名称
  • match conditions:匹配条件,凡是符合条件的未定义字段,都会按照这个规则来映射
  • mapping:映射规则,匹配成功后的映射规则

查询

基本查询

查询所有(match_all)
GET itheima/_search
{
  "query": {
    "match_all": {}
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
匹配查询(match)
GET itheima/_search
{
  "query": {
    "match": {
      "title": "小米电视"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
词条匹配(term)
GET itheima/_search
{
  "query": {
    "term": {
      "price": 3899
    }
  }
}    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
布尔组合(bool)

bool 把各种其它查询通过 must (与)、 must_not (非)、 should (或)的方式进行组合查询

GET itheima/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "title": "小米"
        }
      },
      "must_not": {
        "match": {
          "title": "电视"
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
范围查询(range)
操作符说明
gte大于等于
gt大于
lte less than and euqal小于等于
lt小于
GET itheima/_doc/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 1000,
        "lt": 2800
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
模糊查询(fuzzy)
GET itheima/_doc/_search
{
  "query": {
    "fuzzy": {
      "title": "电视3"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

结果过滤

显示结果过滤
GET /索引库名称/_search
{
  "query": {
    “match_all": {}
  },
  "_source": {
    “includes”:[“显示域名称1","显示域名称12"]
    “excludes”: [“要排除的域名称"]
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
显示内容过滤
举例:
GET /索引库名称/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手机" }},
        	"filter":{
                "range":{"price":{"gt":2000.00,"lt":3800.00}}
        	}
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

排序

GET /索引库名称/_search
{
    "query":{
    "match_all": {}
    },
    "sort": [
      { “域名称1": { "order": "desc" }},
      { “域名称2 ": { "order": "desc" }}
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

分页

举例:
GET /heima/_search
{
  "query": {
    "match_all": {}
  },
  “from”: 3, #起始位置
  “size”: 3  #每页显示条数
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

高亮

其实不管我们在任何浏览器对关键字进行搜索的时候,我们都会发现,搜索的结果中搜索的关键字变成了高亮显示,我们可以在任意浏览器中查看源码会发现都只是在字段前后加上一个显示的效果而已,那我们使用kibana操作Elasticsearch的时候也是可以实现的。
例如:

GET /索引库名称/_search
{
  "query": {
    "match": {
      “title”: “手机“     #查询的关键字
    }
  },
  "highlight": {
    “pre_tags”:<em>,         #CSS的标签
    "post_tags": "</em>",    #CSS的标签
    "fields": {
      “title”: {}      # 要高亮的域
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

聚合

为了方便我们对数据的统计和分析,我们可以使用某种方式对数据进行分组,每一组数据在Elasticsearch中都称为一个桶。

聚合为桶
GET /car/_search
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "color"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
aggs:声明这是一个聚合查询,是aggregations的缩写
popular_colors:给这次聚合起一个名字,可任意指定。
terms:聚合的类型,这里选择terms,是根据词条内容(这里是颜色)划分
field:划分桶时依赖的字段

桶内度量

分组完成以后,我们都会对组中的数据进行运算。比如求平均值等等,这就是桶内度量。

GET /car/_search
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "color"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

aggs:我们在上一个aggs(popular_colors)中添加新的aggs。可见度量也是一个聚合
avg_price:聚合的名称
avg:度量的类型,这里是求平均值
field:度量运算的字段

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/792758
推荐阅读
相关标签
  

闽ICP备14008679号