第一步:搞清楚这个框架(技术)是干什么的,解决了什么问题和痛点,同类“竞品”还有哪些css
第二步:怎么用html
第三步:了解原理web
Elasticsearch
是一个基于 Lucene
的 搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web
接口。数据库
Elasticsearch
是用 Java
语言开发的,是一种流行的企业级搜索引擎。数组
Elasticsearch
的底层是开源库Lucene
。咱们没有办法直接使用Lucene
,必须本身写代码去调用它的接口。
Elasticsearch
是Lucene
的封装,提供了RESTful API
的操做接口,开箱即用。服务器
使用数据库 来作搜索业务,不能很好的知足需求。框架
虽然某一程度上也能够视为数据库,可是它更主要的身份仍是一个优秀的全文搜索引擎。它的出现解决了一部分传统关系型数据库和NoSQL非关系型数据库所没有办法高效完成的一些工做,好比高效的全文检索,结构化检索,甚至是数据分析。curl
eg
:数据库在作模糊查询时,如LIKE
语句,它会遍历整张表,同时进行字符串匹配。elasticsearch
而 es
是基于 倒叙索引 的 ,检索速度很是快。分布式
Elasticsearch
支持中文分词插件
Elasticsearch
支持全文搜索和相关度评分。这样在返回结果就会根据分数由高到低排列。分数越高,意味着和查询语句越相关。
MySQL的Navicat
Elasticsearch
的 Kibana
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)做为文档的序列化格式。
索引
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天生分布式,而且在设计时,屏蔽了分布式的复杂性。
Hadoop Database
HBase
是Apache的 Hadoop
项目的子项目。
HBase
是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
HBase
不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库, HBase
基于列的而不是基于行的模式.
HBase
的原型是Google的BigTable
论文。
MySQL
没法知足海量的数据存储,
MySQL
-> 面向行存储
HBase
-> 面向行存储
图
表名:webtable
两行:com.cnn.www
和 com.example.www
三个列族:contents
、anchor
、people
对于第一行com.cnn.www
anchor
列族包含两列:anchor:cssnsi.com
和 anchor: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
表:
create ‘<table name>’,’<column family>’
行
HBase
中的行是逻辑上的行,物理模型上行时按列族(column family
)分别存取的。
列族
Hbase
表中的每一个列都归属于某个列族,
列名由其 列族前缀 和 限定符 组成,
列的限定符是列族中数据的索引。
eg
:
列族:course
列名:course:math
,course:english
…
cell
由行和列的坐标交叉决定;
单元格是有版本的;
单元格的内容是未解析的字节数组
单元格是由行、列族、列限定符、值和表明值版本的时间戳组成的,({row key,column( =<family>+<qualifier>),version})惟一肯定单元格。cell中的数据是没有类型的,所有是字节码形式存储。