kibana操作Elasticsearch

1.创建索引库

在这里插入图片描述

2.查看索引设置

Get请求可以帮我们查看索引信息,格式:
或者,我们可以使用*来查询所有索引库配置

3.删除索引

DELETE /索引库名

4.映射配置

索引有了,接下来肯定是添加数据。但是,在添加数据之前必须定义映射。
什么是映射?
​ 映射是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等
只有配置清楚,Elasticsearch才会帮我们进行索引库的创建

创建映射字段

PUT /索引库名/_mapping/类型名称
{
“properties”: {
“字段名”: {
“type”: “类型”,
“index”: true,
“store”: true,
“analyzer”: “分词器”
}
}
}

  • 类型名称:就是前面将的type的概念,类似于数据库中的不同表
    字段名:任意填写 ,可以指定许多属性,例如:
  • type:类型,可以是text、long、short、date、integer、object等
  • index:是否索引,默认为true
  • store:是否存储,默认为false
  • analyzer:分词器,这里的ik_max_word即使用ik分词器

PUT heima/_mapping/goods
{
“properties”: {
“title”: {
“type”: “text”,
“analyzer”: “ik_max_word”
},
“images”: {
“type”: “keyword”,
“index”: “false”
},
“price”: {
“type”: “float”
}
}
}

5.查看映射关系

GET /索引库名/_mapping

6.字段属性详解

  • String类型,又分两种:

    • text:可分词,不可参与聚合(主要是可分词)
    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
  • Numerical:数值类型,分两类

    • 基本数据类型:long、interger、short、byte、double、float、half_float
    • 浮点数的高精度类型:scaled_float
    • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
  • Date:日期类型

    elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

index

index影响字段的索引情况。

  • true:字段会被索引,则可以用来进行搜索。默认值就是true
  • false:字段不会被索引,不能用来搜索
    index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
    但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

7.新增数据

POST /索引库名/类型名
{
“key”:“value”
}

8.修改数据

  • id对应文档存在,则修改

  • id对应文档不存在,则新增

    PUT /item/goods/3
    {
    “title”:“超大米手机”,
    “images”:“http://image.leyou.com/12479122.jpg”,
    “price”:3899.00,
    “stock”: 100,
    “saleable”:true
    }

9.删除数据

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

10.查询

基本查询:

GET /索引库名/_search
{
“query”:{
“查询类型”:{
“查询条件”:“查询条件值”
}
}
}

这里的query代表一个查询对象,里面可以有不同的查询属性

  • 查询类型:
    • 例如:match_allmatchtermrange 等等

查询所有(match_all)

   GET /item/_search
    {
        "query":{
            "match_all": {}
        }
    }

- or关系

match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系

GET /item/_search
{
    "query":{
        "match":{
            "title":"小米电视"
        }
    }
}

- and关系

某些情况下,我们需要更精确查找,我们希望这个关系变成and,可以这样做:

GET /item/_search
{
    "query":{
        "match": {
          "title": {
            "query": "小米电视",
            "operator": "and"
          }
        }
    }
}

词条匹配(term)
term` 查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串不会进行分词一般是除了text,keyword之外。除了text外用这个节省效率。(不会分词的)

GET /item/_search
{
    "query":{
        "term":{
            "price":2699.00
        }
    }
}

结果过滤
默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。
如果我们只想获取其中的部分字段,我们可以添加_source的过滤

GET /item/_search
{
  "_source": ["title","price"],
  "query": {
    "term": {
      "price": 2699
    }
  }
}

模糊查询(fuzzy)

fuzzy查询是term` 查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2:

GET /heima/_search
{
  "query": {
    "fuzzy": {
      "title": "appla"
    }
  }
}

我们可以通过fuzziness来指定允许的编辑距离:

GET /heima/_search
{
  "query": {
    "fuzzy": {
        "title": {
            "value":"appla",
            "fuzziness":1
        }
    }
  }
}

指定includes和excludes

我们也可以通过:

  • includes:来指定想要显示的字段

  • excludes:来指定不想要显示的字段

      GET /heima/_search
      {
        "_source": {
          "includes":["title","price"]
        },
        "query": {
          "term": {
            "price": 2699
          }
        }
      }
    
    
    GET /heima/_search
      {
        "_source": {
           "excludes": ["images"]
        },
        "query": {
          "term": {
            "price": 2699
          }
        }
      }
    

范围查询(range)

GET /heima/_search
{
    "query":{
        "range": {
            "price": {
                "gte":  1000.0,
                "lt":   2800.00
            }
    	}
    }
}

在这里插入图片描述

布尔组合(bool)

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

GET /heima/_search
{
    "query":{
        "bool":{
        	"must":     { "match": { "title": "大米" }},
        	"must_not": { "match": { "title":  "电视" }},
        	"should":   { "match": { "title": "手机" }}
        }
    }
}

过滤(filter)

所有的查询都会影响到文档的评分及排名。如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用filter方式:(为了让过滤提交不会影响结果的得分。)一句话是过滤的但是,不是搜索的用filter

GET /heima/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手机" }},
        	"filter":{
                "range":{"price":{"gt":2000.00,"lt":3800.00}}
        	}
        }
    }
}

单字段排序

GET /heima/_search
{
  "query": {
    "match": {
      "title": "小米手机"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

多字段排序

假定我们想要结合使用 price和 _score(得分) 进行查询,并且匹配的结果首先按照价格排序,然后按照相关性得分排序:

GET /goods/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手机" }},
        	"filter":{
                "range":{"price":{"gt":200000,"lt":300000}}
        	}
        }
    },
    "sort": [
      { "price": { "order": "desc" }},
      { "_score": { "order": "desc" }}
    ]

}

11.聚合

Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫,一个叫度量

桶的作用,是按照某种方式对数据进行分组,每一组数据在ES中称为一个,例如我们根据国籍对人划分,可以得到中国桶英国桶日本桶……或者我们按照年龄段对人进行划分:010,1020,2030,3040等。

Elasticsearch中提供的划分桶的方式有很多:

  • Date Histogram Aggregation:根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组
  • Histogram Aggregation:根据数值阶梯分组,与日期类似
  • Terms Aggregation:根据词条内容分组,词条内容完全匹配的为一组
  • Range Aggregation:数值和日期的范围分组,指定开始和结束,然后按段分组
    综上所述,我们发现bucket aggregations 只负责对数据进行分组,并不进行计算,因此往往bucket中往往会嵌套另一种聚合:metrics aggregations即度量

分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为`度量

  • Avg Aggregation:求平均值
  • Max Aggregation:求最大值
  • Min Aggregation:求最小值
  • Percentiles Aggregation:求百分比
  • Stats Aggregation:同时返回avg、max、min、sum、count等
  • Sum Aggregation:求和
  • Top hits Aggregation:求前几
  • Value Count Aggregation:求总数

12 Kibana的SQL查询

我们上面那些是DSL查询,DSL查询可以改造成SQL查询,比如:;
POST /_sql?format=txt
{
“query”: “select * from powermall”
}
注意:如果index库中没有数据,查询会报错;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值