ElasticSearch 2. Kibana基本操作

本文详细介绍了Elasticsearch的索引库、类型映射以及文档的操作,包括创建、查看、删除等。Elasticsearch是一个分布式搜索和分析引擎,其7.2版本后取消了类型(type)概念,使用_doc替代。内容涵盖了如何创建索引库、定义字段映射,以及插入、更新和删除文档的基本操作,并提供了多种查询方式的示例。
摘要由CSDN通过智能技术生成

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

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

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

ElasticsearchMySql
索引库(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"]
        }
      }
    }
    

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

此处一个预留的超链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值