一、搜索的概念
用户输入想要的关键词,返回含有该关键词的所有信息。
使用场景:
1
互联网搜索:谷歌、百度、各种新闻首页
2
站内搜索(垂直搜索):企业
OA
查询订单、人员、部门,电商网站内
部搜索商品(淘宝、京东)场景。
二、数据库作为搜索的弊端
1.站内搜索(垂直搜索):
数据量小,简单搜索,可以使用数据库。
出现的问题:
l
存储问题。电商网站商品上亿条时,涉及到单表数据过大必须拆分表,
数据库磁盘占用过大必须分库(
mycat
)。
l
性能问题:解决上面问题后,查询
“
笔记本电脑
”
等关键词时,上亿条数据
的商品名字段逐行扫描,性能跟不上。
l
不能分词。如搜索
“
笔记本电脑
”
,只能搜索完全和关键词一样的数据,那
么数据量小时,搜索
“
笔记电脑
”
,
“
电脑
”
数据要不要给用户。
2.
互联网搜索,肯定不会使用数据库搜索。数
据量太大。
PB
级。
我们可以使用搜索引擎来解决数据库搜索的问题
:
搜索也是一款数据库,搜索可以进行分词搜索
---
搜索速度非常快
三、常见的搜索引擎
ElasticSearch和Solr
ElasticSearch与Solr比较
1.当单纯的对已有数据进行搜索时,Solr更快
2.当实时建立索引时,Solr会产生io阻塞,查询性能较差, ElasticSearch具有明显的优势
3.随着数据量的增加,Solr的搜索效率会变得更低,而ElasticSearch 却没有明显的变化
总结:
1、es基本是开箱即用(解压就可以用!)【南京企业非常中意】 ,非常简单。Solr 安装略微复杂一丢丢!
2、Solr 利用Zookeeper进行分布式管理,而Elasticsearch<mark>自身带有分布式协调管理功能</mark>。
3、Solr 支持更多格式的数据,比如JSON、XML、 CSV ,而Elasticsearch仅支持json文件格式。
4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友
好支撑
5、Solr 查询快,但更新索引时慢(即插入删除慢) ,用于电商等查询
多的应用;
6、ES建立索引快(即查询慢) ,即实时性查询快,用于facebook新浪等
搜索。
7、Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于
新兴的实时搜索应用。
8、Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,
而Elasticsearch相对开发维护者较少,更新太快,学习使用成本较
高。
四、Elasticsearch 的概念
The Elastic Stack,
包括
Elasticsearch
【搜索,分析】、
Kibana
【可视
化】、
Beats
和
Logstash
【数据的搜集】(也称为
ELK Stack
)。能够安
全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、
分析和可视化。
Elaticsearch
,简称为
ES
,
ES
是一个
开源的高扩展的分布式全文搜索引
擎
, 是整个
ElasticStack
技术栈的核心。
它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台
服务器,处理
PB
级别的数据。
五、Elasticsearch的使用场景
国外:
维基百科,类似百度百科,
“
网络七层协议
”
的维基百科,全文检索,高
亮,搜索推荐
Stack Overflflow
(国外的程序讨论论坛),相当于程序员的贴吧。遇到
it
问题去上面发帖,热心网友下面回帖解答。
GitHub
(开源代码管理),搜索上千亿行代码。
电商网站,检索商品
日志数据分析,
logstash
采集日志,
ES
进行复杂的数据分析(
ELK
技
术,
elasticsearch+logstash+kibana
)
商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时
候,发送通知消息给用户,比如说订阅《
java
编程思想》的监控,如果
价格低于
27
块钱,就通知我,我就去买。
BI
系统,商业智能(
Business Intelligence
)。大型连锁超市,分析全
国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最
高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署
下一个阶段的战略目标。
国内:
百度搜索,第一次查询,使用
es
。
OA
、
ERP
系统站内搜索。
es:
搜索的一款数据库,支持的数据格式
json.
六、倒排索引
倒排索引。数据存储时,经行分词建立
term
索引库。见画图。
分词表 :
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引
(inverted index)
。带有倒排索引的文件我们称为倒排
索引文件
,简称
倒排
文件
(inverted fifile)
。
七、ES的安装
1、安装JDK,至少1.8.0_73以上版本,验证:
java -version。
2、下载和解压缩Elasticsearch安装包,查看目
录结构。
https://www.elastic.co/cn/downloads/elasticsearch
下载地址:
https://www.elastic.co/cn/downloads/
历史版本下载:
https://www.elastic.co/cn/downloads/past-releases/
解压后,进入
bin
文件目录,点击
elasticsearch.bat
文件启动
ES
服务 。
注意:
9300
端口为
Elasticsearch
集群间组件的通信端口,
9200
端口为
浏览器访问的
http
协议
RESTful
端口。
打开浏览器,输入地址:
http://localhost:9200
,测试返回结果,返回结
果如下:
八、Windows安装Kibana
1
、
kibana
是
es
数据的前端展现,数据分析时,可以方便地看到数据。作
为开发人员,可以方便访问
es
。
https://www.elastic.co/cn/downloads/
历史版本下载:
https://www.elastic.co/cn/downloads/past-releases/
2
、下载,解压
kibana
。
3
、启动
Kibana
:
bin\kibana.bat
4
、浏览器访问
http://localhost:5601
进入
Dev Tools
界面。像
plsql
一样支
持代码提示。
5
、发送
get
请求,查看集群状态
GET _cluster/health
。相当于浏览器访
问。
九、ES中常见的概念
Elasticsearch
是
面向文档型数据库
,一条数据在这里就是一个文档。 为
了方便大家理解,我们将
Elasticsearch
里存储文档数据和关系型数据库
MySQL
存储数据的概念进行一个类比
ES
里的
Index
可以看做一个库,而
Types
相当于表,
Documents
则相当
于表的行。这里
Types
的概念已经被逐渐弱化,
Elasticsearch 6.X
中,一
个
index
下已经只能包含一个
type
,
Elasticsearch 7.X
中
, Type
的概念已
经被删除了。
十、ES常用API接口