分布式搜索引擎ElasticSearch
1.初识elasticsearch
1.1.了解ES
1.1.1.elasticsearch的作用
elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,例如:
● 在GitHub搜索代码
2,030,116 CODE RESULTS
SORT:BEST MATCH
REPOSITORIES
7K
CODE
7M
LYLBP/JAVA_MODELSIMPLE
1M
COMMITS
SRC/MAIN/JAVA/COM/LYLBP/MANAGER/ELASTICSEARCH/CONFIG/ESCONFIGJAVA
PACKAGE COM.LYLBP.MANAGER.ELASTICSEARCH.CONFIG;
95K
ISSUES
IMPORT ORG.ELASTICSEARCH.CLIENT.RESTHIGHLEVELCLIENT;
422
DISCUSSIONS
BETA
IMPORT ORG.SPRINGFRAMEWORK.CONTEXT.ANNOTATION.CONFIGURATION;
PACKAGES
168
IMPORT ORG.SPRINGFRAMEWORK.DATA.ELASTICSEARCH.CLIENT.CLIENTCONFIGURATION;
5
MARKETPLACE
IMPORT ORG.SPRINGFRAMEWORK.DATA.ELASTICSEARCH.CLIENT.RESTCLIENTS;
SHOWING THE TOP THREE MATCHES LAST INDEXED 17 DAYS AGO
JAVA
TOPICS
266
● 在电商网站搜索商品
0片
搜索
IPHONE
我的购物车
华为
IPHONE12
手机
IPHONE12MINI
IPHONE 11
IPHONE 12 PRO
IPHONEXR IPHONE8
LIPHONEX
IPHONEXS
拍卖
金融
闪购
生鲜
全部商品分类
美妆馆
超市
共88万+件商品1/100
新品
价格
评论数
综合
销量1
美好
美好
美好
生活
生活
生活
领券立减800元
5999
¥6799.00
¥6099.00
¥149.00
¥10099.00
¥4899.00
APPLE IPHONE 11(A223)
APPLE20WUSB-C手机充电器插头充电头
APPLE IPHONE 12 (A2404)128G8 紫色支
APPLE IPHONE 12 PRO MAX (A2412) 256GB
APPLE苹果IPHONE125G全网通双卡手机
持移动联通电信5G双卡双待手机[抢券
128GB白色移动联通电信4G手机双卡双
海蓝色支持移动联通电信5G双卡双待手
适配器适用 PHONE 12 IPAD 快速充电[惊
蓝色128GB
去看二手
去看二手
200万+条评价
200+条评价
100万+条评价
500万+条评价
20万+条评价
● 在百度搜索答案
GOQGLE
XY
ILLEGALARGUMENTEXCEPTION
HTTPS://STACKOVERFLOW.COM>QUESTIONS>WHEN-.....翻译此页
WHEN SHOULD AN LLEGALARGUMENTEXCEPTION BE THROWN? - STACK ..
2013年3月4日-THE API DOC FOR LILLEGALARQUMENTEXCEPTION : THROWN TO INDICAT A METHOD
HAS BEEN PASSED AN ILLEGAL OR INAPPROPRIATE ARGUMENT.
6个回答 最佳答案:TREAT LLLEGALARGUMENTEXCEPTION AS A PRECONDITIONS CHECK,AND CONSIDER T...
2个回答2018年6月1日
HOW TO USE "THROWS LLLEGALARGUMENTEXCEPTION" IN ...
3个回答
2015年7月27日
ERROR: JAVA.LANG.LLEGALARGUMENTEXCEPTION ...
2008年9月6日
LLLEGALARGUMENTEXCEPTION OR NULLPOINTEREXCEPTION ...
26个回答
个回答
2010年1月22日
WHAT IS THE BEST WAY TO CATCH AN...
STACKOVERFLOW.COM站内的其它相关信息
翻译此页
HTTPS://AIRBRAKE.IO>BLOG>ILLEGALARGUMENTEXC.....翻译
JAVA EXCEPTION HANDLING - LLEGALARGUMENTEXCEPTION - AIRBRAKE
2017年8月4日-MOVING RIGHT ALONG SERIES, TODAY
WE'LL BE DIGGING INTO JAVA.LANG LLIEGALARGUMENTEXCEPTION.
● 在打车软件搜索附近的车
郭家
点我领车费
黑马程序员训练营(上
海校区)
为您推荐附近适合的上车点
航头路/航都路(路*.
口)东南侧
沪南公路
日
五一出行必看知识点!点我
上海市今日天气阴,17C3~23C
你将从黑马程序员训练营(上海校区)上车>
输入你的目的地
1.1.2.ELK技术栈
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域:
[FILEBEAT SYSTEM] SYSLOG DASHBOARD ECS
DASHBOARD
SYSLOG HOSTNAMES AND PROCESSES [FILEBEAT SYSTEM] ECS
SYSLOG EVENTS BY HOSTNAME [FILEBEAT SYSTEM]ECS
DANS-MACBOOK-PRO
20
DANS-MACBOOK-PRO.L.
金
07:00
06:00
05:00
10:00
11:00
DANS-MACBOOK-PRO
09:00
12:00
04.00
COM.APPLE.XPC.LAUNC
PBOGS人S
#TIMESTAMP PER 10 MINUTES
ZOOM.US
CAMTASIA 2018 SNAGITHETPER2019
SYSIOG LOGS [FILEBEAT SYSTEM]ECS
1-50 OF 165
TIME
PROCESS.NAME
MESSAGE
HOST.HOSTNAME
APR 3,2019 & 14:06:08.000 DANS-MACBOOK-PRO
ASSERTION FALED 1BE226: LOXPC DYIB +91033(4938829-09C8-355C-8558-97E070884EC5):0X89
PREVIEW
APR 3,2019 14:05:24.000 DANS-MACBOOK-PRO
ARCHIVE UTAITY
EBUG
ENDUGH HAS BRS BRN ACTIVETED TROUGH INDE SUNONC OR S PLSS,PLEEVETCH TO XPC OR BOO.CHNCKIN ACDIS ANCK
COM.APPLE XPC.LAUNCH
APR 3.2019 @14:05:13.000 DANS-MACBOOK-PRO
OOK(8150])
APR 3.2019 & 14:03:36.000 DANS-MACBOOK-PRO
SYSLOGD
ASL SENDER STATISTICS
DEPRECATFD USE IN BODISOATCH CLENT:DISOATCH SOURCE
ANR3.2019E 13-5900000 DANS-MAROOK-PRO
SWITCHRESX CONTROL
而elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。
KIBANA
数据可视化
存储,计算
ELASTICSEARCH
搜索数据
LOGSTASH
BEATS
数据抓取
1.1.3.elasticsearch和lucene
elasticsearch底层是基于lucene来实现的。Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:https://lucene.apache.org/ 。
DOUG
LUCENE的优势:
CUTTING
易扩展
高性能(基于倒排索引)
LUCENE的缺点:
只限于JAVA语言开发
学习曲线陡峭
不支持水平扩展
APACHE
LUCENE
elasticsearch的发展历史:
●2004年Shay Banon基于Lucene开发了Compass
●2010年Shay Banon 重写了Compass,取名为Elasticsearch。
SHAY
官网地址:HTTPS://WWW.ELASTIC.CN/,目前最新的版本是:7.12.1
BANON
相比与LUCENE,ELASTICSEARCH具备下列优势:
支持分布式,可水平扩展
提供RESTFUL接口,可被任何语言调用
ELASTIC
1.1.4.为什么不是其他搜索技术?
目前比较知名的搜索引擎技术排名:
RANK
SCORE
DATABASE MODEL
DBMS
MAY
APR MAY
MAY
MAY
APR
2021 2021
2020
2021 2020
2021
ELASTICSEARCH
1.
SEARCH ENGINE,MULTI-MODEL
155.35 +3.18
+6.23
1.
2.
2.
92.11 +3.62
2.
+4.36
SPLUNK
SEARCH ENGINE
3.
51.19
3.
-1.39
SOLR
3.
+0.59
SEARCH ENGINE,MULTI-MODEL
4.
9.52
4.
MARKLOGIC
-1.44
4.
-0.40
MULTI-MODEL
5.
7.72
5.
ALGOLIA
8.
+3.25
SEARCH ENGINE
-0.15
6.
7.58
SPHINX
6.
6.
+1.55
+0.53
SEARCH ENGINE
7.
MICROSOFT AZURE SEARCH
6.05-0.49
7.
5.
-0.07
SEARCH ENGINE
8.
4.38-0.39
ARANGODB
-0.30
MULTI-MODEL
8.
7.
9.
3.44 +0.27 +1.09
VIRTUOSO
MULTI-MODEL
9.
11.
10.
2.20-0.03
AMAZON CLOUDSEARCH
10.
-0.39
SEARCH ENGINE
10.
11.
XAPIAN
-0.02 +0.13
0.88
11.
12.
SEARCH ENGINE
12.
0.77
CRATEDB
MULTI-MODEL
12.
13.
+0.02 +0.09
13.
SERVICE
ALIBABA CLOUD LOG S
0.44
SEARCH ENGINE
13.
-0.01
+0.17
15
虽然在早期,Apache Solr是最主要的搜索引擎技术,但随着发展elasticsearch已经渐渐超越了Solr,独占鳌头:
DB-ENGINES RANKING OF SEARCH ENGINES
ELASTICSEARCH
SOLR
100
JANUARY 2016
EASTICSEARCH: 77.212
80
09
SCORE (LOGARITHMIC SCALE)
40
20
10
8
MAY 2021,DB-ENGINES.COM
2018
2013
2019
2015
2020
2016
2017
2014
2021
1.1.5.总结
什么是elasticsearch?
●一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能
什么是elastic stack(ELK)?
●是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
什么是Lucene?
●是Apache的开源搜索引擎类库,提供了搜索引擎的核心API
1.2.倒排索引
倒排索引的概念是基于MySQL这样的正向索引而言的。
1.2.1.正向索引
那么什么是正向索引呢?例如给下表(tb_goods)中的id创建索引:
搜索手机
SELECT* FROM TB_GOODS WHERE TITLE LIKE '%手机%'
ID
TITLE
PRICE
1
小米手机
3499
逐条数据扫描
否
华为手机
4999
2
丢弃
判断是否包含'手机
3
华为小米充电器
49
小米手环
4
49
是
存入结果集
正向索引
2
华为手机
4999
1
小米手机
3499
如果是根据id查询,那么直接走索引,查询速度非常快。但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:
1)用户搜索数据,条件是title符合"%手机%"
2)逐行获取数据,比如id为1的数据
3)判断数据中的title是否符合用户搜索条件
4)如果符合则放入结果集,不符合则丢弃。回到步骤1
逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。
1.2.2.倒排索引
倒排索引中有两个非常重要的概念:
●文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
●词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
创建倒排索引是对正向索引的一种特殊处理,流程如下:
●将每一个文档的数据利用算法分词,得到一个个词条
●创建表,每行数据包括词条、词条所在文档id、位置等信息
●因为词条唯一性,可以给词条创建索引,例如hash表结构索引
如图:
词条
文档ID
(TERM)
ID
TITLE
PRICE
1,3,4
小米
1
3499
小米手机
1,2
手机
华为手机
2
4999
华为
2,3
3
华为小米充电器
49
3
充电器
小米手环
4
299
手环
4
正向索引
倒排索引
倒排索引的搜索流程如下(以搜索"华为手机"为例):
1)用户输入条件"华为手机"进行搜索。
2)对用户输入内容分词,得到词条:华为、手机。
3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。
4)拿着文档id到正向索引中查找具体文档。
如图:
倒排索引
词条
文档ID
(TERM)
搜索'华为手机
1 ,3 ,4
小米
分词
手机
1,2
华为
2,3
得到:'华为,手机'两个词条
3
充电器
去词条列表查询
手环
4
文档ID
得到每个词条所在文档ID:
正向索引
华为:2,3
手机:1,2
ID
TITLE
PRICE
根据文档ID
查询文档
小米手机
3499
1
2
华为手机
4999
得到ID为1,2,3的文档
3
华为小米充电器
49
存入结果集
4
小米手环
299
虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。
1.2.3.正向和倒排
那么为什么一个叫做正向索引,一个叫做倒排索引呢?
● 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
● 而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
是不是恰好反过来了?那么两者方式的优缺点是什么呢?
正向索引:
●优点:
○可以给多个字段创建索引
○根据索引字段搜索、排序速度非常快
●缺点:
○根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
倒排索引:
●优点:
○根据词条搜索、模糊搜索时,速度非常快
●缺点:
○只能给词条创建索引,而不是字段
○无法根据字段做排序
2.小节
由于ES课程API文档较多,这里统一汇总如下,有需自取
(387 KB)