ES是什么
关键词:倒排索引、REST风格API、JSON格式的文档、分片、主节点、分片副本
索引(index,类似关系数据库中的数据库)、
类型(type,类似关系数据库中的表)、
文档(Document,包含多个域,json格式,每个文档可以存储不同的域集,与mongo相似。类似关系数据库中的一个记录,即行)、
域(field,也成为字段。类似于列)
ES底层原理介绍可借鉴:https://blog.youkuaiyun.com/zkyfcx/article/details/79998197
elasticsearch
简写es,es是一个高扩展、开源的全文检索和分析引擎,它可以准确实时地快速存储、搜索、分析海量的数据。
什么是全文检索
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据。
ES能干什么
- 一个线上商城系统,用户需要搜索商城上的商品。
在这里你可以用es存储所有的商品信息和库存信息,用户只需要输入”空调”就可以搜索到他需要搜索到的商品。 - 一个运行的系统需要收集日志,用这些日志来分析、挖掘从而获取系统业务未来的趋势。
你可以用logstash(elk中的一个产品,elasticsearch/logstash/kibana)收集、转换你的日志,并将他们存储到es中。一旦数据到达es中,就你可以在里面搜索、运行聚合函数等操作来挖掘任何你感兴趣的信息。 - 如果你有想基于大量数据(数百万甚至数十亿的数据)快速调查、分析并且要将分析结果可视化的需求。
你可以用es来存储你的数据,用kibana构建自定义的可视化图形、报表,为业务决策提供科学的数据依据。
可以这么认为,es是一个企业级海量数据的搜索引擎,可以理解为是一个企业级的百度搜索,除了搜索之外,es还可以快速的实现聚合运算。
ES特性
1、精心设计的API
ElasticSearch认为数据应该伴随在URL中,或者作为请求的主体(request body),以一种JSON格式的文档发送给服务器。如果读者用Java或者其它运行在JVM虚拟机上的语言,应该关注一下Java API,它除了是群集中内置的REST风格API外,功能与URL请求是一样的。值得一提的是在ElasticSearch内部,节点之间的通信也是用相关的Java API。
linux下可用curl工具访问ES,如
curl -XPUT http://localhost:9200/blog/article/1 '{"title": "Newversion of Elastic Search released!", "content": "...","tags":["announce", "elasticsearch", "release"] }'
索引数据方法:(1)通过索引API,如使用curl;(2)使用bulk API(通常采用HTTP协议)批量添加文档;(3)使用UDP bulk API(采用非连接的数据报协议,速度快、可靠性差)批量添加文档;(4)通过river插件,river运行在ElasticSearch集群的节点上,能够从外部系统中获取数据。
(有一点需要注意,索引数据的操作只会发生在主分片(primary shard)上,而不会发生在分片副本(Replica) 上。如果索引数据的请求发送到的节点没有合适的分片或者分片是副本,那么请求会被转发到含有主分片的节点。)
参考原文:https://blog.youkuaiyun.com/duanduanpeng/article/details/72633148
https://blog.youkuaiyun.com/zkyfcx/article/details/79998197(推荐)
同类比较
关系型数据库 | 数据库 | 表 | 行 | 列 |
ElasticSearch | 索引 | 类型 | 文档 | 字段 |
2.ES分布式搜索,传统数据库遍历式搜索
ES支持分片和复制,从而方便水平分割和扩展,复制保证了es的高可用与高吞吐。
在ES中,当你创建一个索引(数据库)的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的索引(数据库),索引可以被放置到集群中的任何节点上。分片优点:
1.允许你水平分割/扩展你的内容容量
2.允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
3.分片的分布,它的文档怎样聚合回搜索请求,完全由Elasticsearch管理
3.ES采用倒排索引,传统数据库采用B+树索引
假设一个文档(用id标识)是有许多的单词(用value标识)组成的,每个单词可能同一个文档中重复出现很多次,也可能出现在不同的文档中。
正排索引:从文档角度看其中的单词,表示每个文档都含有哪些单词,以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。
倒排索引:从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。
简单理解,
正排索引:id ---> value
倒排索引:value ---> id
ES中为所有字段默认都建了倒排索引。
4.ES没有用户验证和权限控制
5.ES没有事务的概念,不支持回滚,误删不能恢复
6.ES免费,完全开源;传统数据库部分免费
7.结合工作举例
例如,要计算出2.38亿会员中有多少80后的已婚的上海男士。
传统数据库执行时间: 5个小时左右
ES执行时间:1分钟