elasticsearch简述与特性分析

1 搜索的演化

1.1 搜索是什么
  1. 概念:用户输入想要的关键词,返回含有该关键词的所有信息。
  2. 场景:
    1. 互联网搜索:谷歌、百度、各种新闻首页
    2. 站内搜索(垂直搜索):企业OA查询订单、人员、部门,电商网站
    3. 内部搜索商品(淘宝、京东)场景。
1.2 数据库做搜索弊端
  1. 站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。
  2. 问题出现:
    1. 存储问题: 电商网站商品上亿条时,涉及到单表数据过大必须拆分表,数据库磁盘占用过大必须分库(mycat)。
    2. 性能问题:解决上面问题后,查询“笔记本电脑”等关键词时,上亿条数据的商品名字段逐行扫描,性能跟不上。
    3. 不能分词:如搜索“笔记本电脑”,只能搜索完全和关键词一样的数据,那么数据量小时,搜索“笔记电脑”,“电脑”数据要不要给用户。
1.3 互联网搜索,肯定不会使用数据库搜索。数据量太大。PB级。
1.4 全文检索、倒排索引和Lucene
  1. 全文检索
  2. 倒排索引。数据存储时,进行分词建立term索引库。见画图。

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(invertedfifile)。

  1. Lucene

就是一个jar包,里面封装了全文检索的引擎、搜索的算法代码。开发时,引入lucen的jar包,通过api开发搜索相关业务。底层会在磁盘建立索引库。

2 Elasticsearch简述

2.1.1 简介

官网:https://www.elastic.co/cn/products/elasticsearch1.3.2

  1. Elasticsearch的功能
  2. 分布式的搜索引擎和数据分析引擎

搜索:互联网搜索、电商网站站内搜索、OA系统查询
数据分析:电商网站查询近一周哪些品类的图书销售前十;
新闻网站,最近3天阅读量最高的十个关键词,舆情分析。

  1. 全文检索,结构化检索,数据分析

全文检索:搜索商品名称包含java的图书select from books where book_name like “%java%”。
结构化检索:搜索商品分类为spring的图书都有哪些,select from books where category_id=‘spring’
数据分析:分析每一个分类下有多少种图书,select category_id,count() from books group by category_id

  1. 对海量数据进行近实时的处理

分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索,进行并行查询,提高搜索效率。相对的,Lucene是单机应用。

近实时:数据库上亿条数据查询,搜索一次耗时几个小时,是批处理(batch-processing)。而es只需秒级即可查询海量数据,所以叫近实时。秒级。

2.1.2 Elasticsearch的使用场景

国外:

维基百科,类似百度百科,“网络七层协议”的维基百科,全文检索,高亮,搜索推荐StackOverflflow(国外的程序讨论论坛),相当于程序员的贴吧。遇到it问题去上面发帖,热心网友下面回帖解答。GitHub(开源代码管理),搜索上千亿行代码。电商网站,检索商品日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《Carl的笔记》的监控,如果价格低于27块钱,就通知我,我就去买。BI系统,商业智能(Business Intelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。

国内:

以前的百度搜索,第一次查询,使用es。后面则会添加一些广告。OA、ERP系统站内搜索。

2.1.3 Elasticsearch的特点
  1. 可拓展性:大型分布式集群(数百台服务器)技术,处理PB级数据,大公司可以使用。小公司数据量小,也可以部署在单机。大数据领域使用广泛。
  2. 技术整合:将全文检索、数据分析、分布式相关技术整合在一起:lucene(全文检索),商用的数据分析软件(BI软件),分布式数据库(mycat)
  3. 部署简单:开箱即用,很多默认配置不需关心,解压完成直接运行即可。拓展时,只需多部署几个实例即可,负载均衡、分片迁移集群内部自己实施。
  4. 接口简单:使用restful api进行交互,跨语言。功能强大:Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能,如全文检索,同义词处理,相关度排名。

3 elasticsearch核心概念

3.1 lucene和elasticsearch的关系

Lucene:最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂Elasticsearch:基于lucene,封装了许多lucene底层功能,提供简单易用的restful api接口和许多语言的客户端,如java的高级客户端(Java High Level REST Client)和底层客户端(Java Low Level REST Client)起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。失业在家帮老婆写一个菜谱搜索擎。封装了lucene的开源项目,compass。找到工作后,做分布式高性能项目,再封装compass,写出了elasticsearch,使得lucene支持分布式。现在是Elasticsearch创始人兼Elastic首席执行官。哈哈,等什么时候carl回家做菜了也写个组件出来。

3.2 elasticsearch的核心概念
  1. NRT(NearRealtime):近实时

    两方面:
    写入数据时,过1秒才会被搜索到,因为内部在分词、录入索引。
    es搜索时:搜索和分析数据需要秒级出结果。

  2. Cluster:集群

    包含一个或多个启动着es实例的机器群。通常一台机器起一个es实例。同一网络下,集名一样的多个es实例自动组成集群,自动均衡分片等行为。默认集群名为“elasticsearch”。

  3. Node:节点

    每个es实例称为一个节点。节点名自动分配,也可以手动配置。

  4. Index:索引

    包含一堆有相似结构的文档数据。
    索引创建规则:

    1. 仅限小写字母,不能包含\、/、 、?、"、<、>、|、#以及空格符等特殊符号
    2. 从7.0版本开始不再包含冒号
    3. 不能以-、_或+开头
    4. 不能超过255个字节(注意它是字节,因此多字节字符将计入255个限制)
  5. Document:文档

    es中的最小数据单元。一个document就像数据库中的一条记录。通常以json格式显示。多个document存储于一个索引(Index)中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值