欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch 2. Kibana基本操作

程序员文章站 2022-07-06 10:46:25
...

Elasticsearch提供了Rest风格http请求接口。可以使用可发起Http请求的工具如Postman进行操作或者Kibana可视化工具操作。

API文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。本质也是一个存储数据库,很多概念与Mysql数据库类似

Elasticsearch MySql
索引库(indexes) Databases 数据库
类型(type) Table 数据表
文档(Document) Row 行
字段(Field) Columns 列
映射配置(mappings) 表结构

对比方便理解

1、操作索引库 indexes

添加:PUT /my_index (还可以传递参数settings进行索引库设置,后续学到再说)

查看:GET /my_index

删除:DELETE /my_index

2、操作类型及映射 type&mappings

索引库相当于数据库,有了索引库就可以建立类型,相当于数据库中的表。建立数据库表需要字段和字段约束,这种数据表-字段-字段约束的关系在es中即字段映射mappings。

本次学习基于es7.2版本,与之前版本发生变化

ES数据存储结构变化:去除了Type
es6时,官方就提到了es7会删除type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc作为type,官方说在8.x版本会彻底移除type。
api请求方式也发送变化,如获得某索引的某ID的文档:GET index/_doc/id其中index和id为具体的值

原文地址:https://blog.csdn.net/deaidai/article/details/90523059

2.1 版本6.x创建类型和映射(需要先创建索引库)

语法:

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

# 解释如下:
类型名称:type名,类似于数据库中的表
字段名:表中的字段,下面指定字段的许多属性,例如:
	type:数据类型,可以是text、long、short、date、integer、object等
	index:是否索引,默认为true  
	store:是否存储,默认为false
	analyzer:分词器,后续学习

# 举例,建立用户表user,有用户名username和密码password两个字段

PUT /my_index/_mapping/user
{
  "properties": {
    "username": {
      "type": "text"
    },
    "password": {
      "type": "keyword",
      "index": false
    }
  }
}

2.2 版本7.x之后创建映射(需要先创建索引库)

7.x版本取消了type,统一为_doc

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

所以上述user表可直接写为:

PUT /user

PUT /user/_mapping
{
  "properties": {
    "username": {
      "type": "text"
    },
    "password": {
      "type": "keyword",
      "index": false
    }
  }
}

2.3 映射属性详解

这里查找了几种常用的属性,后续遇到其他的了再补充

  • type 数据类型

    总结几个常用的:

    • String类型:分为两种:

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

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

      可以格式化为字符串存储,但是项目中存储为毫秒值了,存储为long,节省空间?

    • Array数组类型

    • Object对象

  • index 是否索引

    • true:字段会被索引,则可以用来进行搜索。默认值就是true
    • false:字段不会被索引,不能用来搜索
  • store 是否独立储存

    原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。

  • analyzer 分词器

    Analyzer(分词器)的作用是把一段文本中的词按规则取出所包含的所有词。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言(规则),要用不同的分词器。

    后续学习使用

2.4 查看映射

6.x版本语法:GET /索引库名/_mapping/类型名

7.x版本语法:GET /索引库名/_mapping

3、操作文档 Document

操作文档就是操作索引库中的数据,类似于操作一行数据

3.1 新增文档

  • 插入并生成随机ID

    POST /索引库名/_doc
    {
    	"字段": "值"
    }
    

    例如插入user:zs,123456

    POST /user/_doc
    {
      "username" : "zs",
      "password" : "123456"
    }
    

    返回:

    {
      "_index" : "user",
      "_type" : "_doc",
      "_id" : "zyQGinkBe_0ijyU9FhjG",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 0,
      "_primary_term" : 1
    }
    
  • 插入并使用自定ID

    POST /索引库名/_doc/ID
    {
    	"字段": "值"
    }
    

    例如插入user:ls,123456,id指定为1

    POST /user/_doc/1
    {
      "username" : "ls",
      "password" : "123456"
    }
    

    返回:

    {
      "_index" : "user",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 1,
      "_primary_term" : 1
    }
    

    如果id重复则为更新:

    返回:

    {
      "_index" : "user",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 2,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 8,
      "_primary_term" : 1
    }
    

3.2 修改文档

  • 将POST修改为PUT即为修改操作,当表中有id相符的数据时,执行修改,没有时,执行添加

  • 根据条件更新某一字段(后续学习完高级查询后就能更熟练的使用了吧)

    POST /user/_update_by_query
    {
      "script": {
        "source": "ctx._source['username'] = 'lss'"
      },
      "query": { 
        "term" : {
          "_id" : 1
        }
      }
    }
    

3.3 删除文档

  • 根据ID删除

    DELETE /索引库名/_doc/ID

  • 根据条件删除

    POST  /索引库名/_delete_by_query
    {
      "query": { 
        "match": {
          "字段名": "搜索关键字"
        }
      }
    }
    例如删除全部:
    POST  索引库名/_delete_by_query
    {
      "query": { 
        "match_all": {}
      }
    }
    

    根据查询条件来查询,后续学习完高级查询后就能更熟练的使用了吧

3.4 查询文档

查询基本语法:

POST /索引库名/_search
{
    "query":{
        "查询类型":{
            "查询条件":"查询条件值"
        }
    }
}

这里query里面可以有不同的查询属性,下一篇学习es的高级查询语法,这里先写几个简单的查询

  • match_all 查询所有

    POST /user/_search
    {
      "query": {
        "match_all": {}
      }
    }
    
  • term 词条匹配

    用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串,类似于mysql的=

    POST /user/_search
    {
      "query": {
        "term": {
          "username": "zw"
        }
      }
    }
    
  • terms 多词条匹配

    类似于mysql的in语句

    POST /user/_search
    {
      "query": {
        "terms": {
          "_id": [1,2]
        }
      }
    }
    
  • match 匹配查询

    类似于mysql的like语句,但并不一定是**%值%的模糊查询模式,当配置了分词器时,会先分词然后按照分词进行查询,多个词条之间是or**的关系。

    POST /user/_search
    {
      "query": {
        "match": {
          "username": "加油努力奋斗"
        }
      }
    }
    

    or关系变为and关系:

    POST /user/_search
    {
      "query": {
        "match": {
          "username": {
            "query": "加油努力奋斗",
            "operator": "and"
          }
        }
      }
    }
    
  • multi_match 多字段匹配查询

    与match效果类似,不同的是它可以在多个字段中查询

    POST /user/_search
    {
      "query": {
        "multi_match": {
          "query": "加油努力奋斗",
          "fields": ["username","passwor"]
        }
      }
    }
    

后续学习更多的查询类型,高级查询(组合查询、范围查询等)、结果过滤、排序等

此处一个预留的超链接

相关标签: 自学ElasticSearch