ES入门学习笔记

介绍:

ES是一个分布式文档的非关系型数据库(文档类似于关系型数据库中的单条记录),文档的每个字段默认会被索引,每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。ES基于Restful Api接口,可通过Restful Api与ES进行交互。

使用案例:

  1. es可作为博客系统的数据库,文章等内容储存到es中,可根据文章内容进行快速检索
  2. 当关系型数据库中数据量特别大查询慢时,可将大量数据导入es中,查询走es
  3. 部署大规模的日志框架、logstash采集日志,es存储、搜索和分析海量的事件,kibana可视化查看结果;ELK技术,elasticsearch+logstash+kibana

es官方指南

快速启动项目

在Windows环境下,下载es与Kibana,Kibana是一个开源的分析与可视化平台,可通过kibana的Dev Tool与es的数据进行CURD,kibana版本和es版本同步更新,所以两者最好使用一致的版本,下载地址:es下载kibana下载

下载后解压各自的压缩包,在cmd中运行各自压缩包下bin目录下的.bat文件即可;es默认端口号9200,kibana默认端口号5601,访问localhost:5601进入kibana

概念

索引 index:一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。

类型:类似传统关系数据库中的表,在es旧版本当中一个索引库中可包含多个类型,在es的索引中,不同的映射类型中存在相同的属性名,他们底层都是使用同一个Lucene属性,由于在同一个索引库不同类型中字段比较少或没有,会影响es的查询效率,所以后续在 es6.0.0 版本中一个文档只能包含一个类型,而在 7.0.0 中,类型则将被弃用,到了 8.0.0 中则将完全删除。7.x中的类型默认为_doc

文档:相当于关系型数据库的单条记录

字段:相当于关系型数据库中的 columns 列

倒排索引:

关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。在es中,一个文档中的每一个属性默认被创建了倒排索引。一个没有倒排索引的属性是不能被搜索到的。 es查询为什么快?

倒排索引操作步骤:

  1. 先将文档中包含的关键字全部提取出来
  2. 然后再将关键字与文档的对应关系保存起来
  3. 最后对关键字本身做索引排序。

这样在用户检索关键字时, 可以先查找关键字索引,在通过关键字与文档的对应关系查找到所在的文档。

如下面的三个文档:

idagesexname
118female北大
220male河北大学青年
318male爱国青年

包含指定关键字的文档:

序号关键字包含文档
1北大1,2
2河北2
3大学2
4青年2,3
5爱国3
6181,3
7202
8male2,3
9female1

根据关键字查询,可直接检索出结果文档

RestApi

methodurl描述
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id查询文档通过文档id
POSTlocalhost:9200/索引名称/类型名称/_search查询所有数据

字段主要数据类型

  1. 字符串类型: text, keyword
  2. 数字类型:long, integer, short, byte, double, float, half_float, scaled_float
  3. 日期:date
  4. 日期 纳秒:date_nanos
  5. 布尔型:boolean
  6. Binary:binary
  7. Range: integer_range, float_range, long_range, double_range, date_range

分片

分片分为主分片复制分片

分片类似与mysql中的分库分表,es在创建索引库时可设置创建几个主分片与复制分片,默认情况下,一个索引被分配 5 个主分片,一个主分片有一个复制分片,每个文档存储在独立的主分片中,插入一个文档时,会根据文档的_id(唯一id)决定该文档存储在哪个主分片中;

复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的分片取回文档。主分片或者复制分片都可以处理读请求——搜索或文档检索,所以数据的冗余越多,能处理的搜索吞吐量就越大。

es深入分片

举例

更全面的用kibana查询es数据教程

聚合查询

// 创建一个商品索引库,不指定类型,类型默认
PUT goods
{
  	// mappings 就是对索引库中索引的字段名称及其数据类型进行定义,类似于mysql中的表结构信息。
	"mappings": {
		"properties": {
			"goodsId": {
				"type": "integer"
			},
            // 设置goodsName类型为text用于全文检索,同时类型又为keyword用于关键词搜索
            // keyword类型的字段默认会排序,取数据时会直接根据顺序输出,查询效率高
			"goodsName": {
				"type": "text",
				"fields": {
					"keyword": {
						"type": "keyword",
                        // 索引最大的字段值长度,超出部分不会被索引且存储
						"ignore_above": 256
					}
				}
			},
			"createTime": {
				"type": "date"
			}
		}
	}
}
// 插入一条商品数据,不指定id
POST goods/_doc
{
  "goodsId":1,
  "goodsName":"商品1",
  "createTime":"1643178793939"
}
// 查询所有数据
GET goods/_search
// 结果:
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2, // 共两条数据
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "goods",
        "_type" : "_doc",
        "_id" : "vhqYlX4BFS2tMwa2XXMK",
        "_score" : 1.0,
        "_source" : {
          "goodsId" : 1,
          "goodsName" : "商品1",
          "createTime" : "1643178793939"
        }
      },
      {
        "_index" : "goods",
        "_type" : "_doc",
        "_id" : "wRqYlX4BFS2tMwa2dXO9",
        "_score" : 1.0,
        "_source" : {
          "goodsId" : 2,
          "goodsName" : "商品2",
          "createTime" : "1643178793939"
        }
      }
    ]
  }
}
// 根据goodsId条件查询
GET goods/_search
{
  "query": {
    "match": {
      "goodsId": 1
    }
  }
}
// 结果:
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "goods",
        "_type" : "_doc",
        "_id" : "vhqYlX4BFS2tMwa2XXMK",
        "_score" : 1.0,
        "_source" : {
          "goodsId" : 1,
          "goodsName" : "商品1",
          "createTime" : "1643178793939"
        }
      }
    ]
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值