es+hbase学习

第一步:搞清楚这个框架(技术)是干什么的,解决了什么问题和痛点,同类“竞品”还有哪些css

第二步:怎么用html

第三步:了解原理web

Elasticsearch

WHAT

Elasticsearch 是一个基于 Lucene搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。数据库

Elasticsearch 是用 Java 语言开发的,是一种流行的企业级搜索引擎。数组

Elasticsearch 的底层是开源库 Lucene。咱们没有办法直接使用 Lucene ,必须本身写代码去调用它的接口。

ElasticsearchLucene 的封装,提供了 RESTful API 的操做接口,开箱即用。服务器

WHY

使用数据库 来作搜索业务,不能很好的知足需求。框架

虽然某一程度上也能够视为数据库,可是它更主要的身份仍是一个优秀的全文搜索引擎。它的出现解决了一部分传统关系型数据库和NoSQL非关系型数据库所没有办法高效完成的一些工做,好比高效的全文检索,结构化检索,甚至是数据分析。curl

响应时间

eg:数据库在作模糊查询时,如LIKE 语句,它会遍历整张表,同时进行字符串匹配。elasticsearch

es 是基于 倒叙索引 的 ,检索速度很是快。分布式

分词

Elasticsearch支持中文分词插件

相关性

Elasticsearch 支持全文搜索和相关度评分。这样在返回结果就会根据分数由高到低排列。分数越高,意味着和查询语句越相关。

可视化界面

MySQL的Navicat

ElasticsearchKibana

HOW

入门使用

基础知识

Elasticsearch

Java API

Java客户端是经过 9300端口 并使用Elasticsearch 的原生传输协议和集群交互。

集群中的节点经过端口 9300彼此通讯。若是这个端口没有打开,节点将没法造成一个集群。

RESTful API with Json over HTTP

基于HTTP的 Json RESTful API

全部其它语言可使用 RESTful API 经过端口 9200 和 Elasticsearch 进行通讯,

也可使用 curl 命令来和 Elasticsearch 交互。

curl 是经常使用的命令行工具,用来请求 web服务器。它的名字就是客户端(client)的URL工具的意思。

面向文档

Elasticsearch 是面向文档的,意味着它存储整个对象或 文档。

Elasticsearch 不只存储文档,并且索引每一个文档的内容,使之能够被检索。

(好比说,存储员工文档,一个文档表明一个员工,存储数据到Elasticsearch的行为叫作索引。)

在Elasticsearch中,咱们对文档进行索引、检索、排序和过滤,而不是对行列数据。

这是一种彻底不一样的思考数据方式,也是Elasticsearch能支持复杂全文检索的缘由。

Elasticsearch 使用 JSON(JavaScript Object Notation)做为文档的序列化格式。

索引

  • 名词:一个 索引 相似于传统关系型数据库中的一个 数据库,是一个存储关系型文档的地方
  • 动词:索引一个文档,就是存储一个文档到一个 索引(名词)中,以便被检索和查询,这很是相似于SQL语句中的INSERT关键字

倒排索引

关系型数据库经过增长一个索引,好比一个B-Tree索引 到指定的列上,以便提高数据检索的速度。

Elasticsearch 和 Lucene 使用一个叫作 倒排索引的结构来达到相同的目的。

默认的,一个文档中的每个属性都是 被索引的 (有一个倒排索引) 和可搜索的。

一个没有倒排索引的属性是不能被搜索到的。

搜索

检索所有数据

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

检索指定索引数据

GET /indexName/_search{}

检索指定索引的指定字段

GET /indexName/_search
{
"query": {
"match": {
"field":"text"
//"title": "elasticsearch"
}
}
}

短语搜索

精确查询一个短语 “Time is money”

//使用 match_phrase
GET /indexName/_search
{
"query": {
"match_phrase": {
"field": "Time is money"
}
}
}

高亮搜索

新增 highlight参数,组合查询

GET /indexName/_search
{
"query": {
"match": {
"field": "text"
}
},
"highlight": {
"fields": {
"field": {}
}
}
}

//高亮部分 以 HTML 标签 封装

分析

Elasticsearch 有一个功能叫作聚合(aggregations),容许咱们基于数据生成一些精细的分析结果。

聚合与SQL中的GROUP BY 相似但更强大。

GET /indexName/_search
{
"aggs": {
"NAME": {
"AGG_TYPE": {}
}
}
}

Elasticsearch天生分布式,而且在设计时,屏蔽了分布式的复杂性。

Hbase

WHTA

Hadoop Database

HBase 是Apache的 Hadoop 项目的子项目。

HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统

HBase 不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库, HBase基于列的而不是基于行的模式.

HBase的原型是Google的BigTable论文。

WHY

MySQL没法知足海量的数据存储,

MySQL -> 面向行存储

HBase -> 面向行存储

HOW

HBase概念视图

表名:webtable

两行:com.cnn.wwwcom.example.www

三个列族:contentsanchorpeople

对于第一行com.cnn.www

anchor列族包含两列:anchor:cssnsi.comanchor:my.look.ca

{
"com.cnn.www": {
contents: {
t6: contents:html: "<html>..."
t5: contents:html: "<html>..."
t3: contents:html: "<html>..."
}
anchor: {
t9: anchor:cnnsi.com = "CNN"
t8: anchor:my.look.ca = "CNN.com"
}
people: {}
}
"com.example.www": {
contents: {
t5: contents:html: "<html>..."
}
anchor: {}
people: {
t5: people:author: "John Doe"
}
}
}

HBase物理视图

HBase 概念视图中显示的空单元根本不存储

HBase表、行与列族

建立一个HBase表:

create ‘<table name>’,’<column family>’

HBase中的行是逻辑上的行,物理模型上行时按列族(column family)分别存取的。

列族

Hbase表中的每一个列都归属于某个列族,

列名由其 列族前缀 和 限定符 组成,

列的限定符是列族中数据的索引。

eg

列族:course

列名:course:mathcourse:english

cell

由行和列的坐标交叉决定;

单元格是有版本的;

单元格的内容是未解析的字节数组

单元格是由行、列族、列限定符、值和表明值版本的时间戳组成的,({row key,column( =<family>+<qualifier>),version})惟一肯定单元格。cell中的数据是没有类型的,所有是字节码形式存储。

相关文章
相关标签/搜索