推广 热搜: 行业  设备    系统  参数  经纪    教师  机械  中国 

es的搜索 es搜索原理

   日期:2024-11-10     作者:n19v1    caijiyuan   评论:0    移动:http://changmeillh.xhstdz.com/mobile/news/6183.html
核心提示:我们先来看一下百度百科的解释:Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基

es的搜索 es搜索原理

我们先来看一下百度百科的解释:

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

我们来总结一下:

Elasticsearch是一个建立在全文搜索引擎Apache Lucene(TM)基础上的分布式可扩展的实时搜索和分析引擎,ta不仅包含全文搜索功能, 还可以进行如下的工作:

  1. 分布式实时文件存储,并将每一个字段都编入索引, 使其可以被搜索
  2. 实时分析的分布式搜索引擎
  3. 可以扩展到上百台服务器, 处理PB级别的结构化和非结构化数据。
  1. 检索数据:对于海量的应用数据, 关系型数据库检索问题一直是噩梦, ES可以说就是为了解决它而生, 有了它快速搜索不再是开发者头痛的难题
  2. 分布式存储:相对于传统的存储方案, ES提供了分片, 持久化方案, 既比关系型数据库速度快, 又比缓存数据库(nosql)存储的多, 持久化更好
  3. 数据分析:ES结合logstash, kibana构成大名鼎鼎的ELK, 实时大规模的日志收集, 分析和展示, 让用户可以多维度对日志实现分析, 查询和管理。

全文检索顾名思义, 就是在文档中找单词, 类似于我们通过字典查字的过程。

那既然全文文本那么多, 如何快速的找到我们想检索的单词, 或者关键字, 就是难点。

总的思想就是, 计算机程序通过扫描文章中的每个词, 对必要的词建议一个索引, 指明该次在文章中出现的次数和位置。当用户查询的时候根据建立的索引进行查找。

  1. 搜索引擎
  2. 站内搜索
  3. 系统文件搜索
  1. Lucene:如果使用该技术实现,需要对Lucene的API和底层原理非常了解,而且需要编写大量的Java代码。
  2. Solr:使用java实现的一个web应用,可以使用rest方式的http请求,进行远程API的调用.
  3. ElasticSearch(ES):可以使用rest方式的http请求,进行远程API的调用。
  • 当单纯的对已有数据进行搜索时,Solr更快。

es的搜索 es搜索原理_es的搜索

  • 当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。‘

es的搜索 es搜索原理_大数据_02

  • 随着数据量的增加Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。

es的搜索 es搜索原理_大数据_02

  • 随着数据量的增加Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化**。

es的搜索 es搜索原理_数据库_04

  • 大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到Elasticsearch以后的平均查询速度有了50倍的提升。

es的搜索 es搜索原理_数据库_05

  • Elasticsearch 与Solr的比较

Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能; Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式; Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供; Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

有人可能会说,对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构化数据有一定的结构可以采取一定的搜索算法加快速度),那么把我们的非结构化数据想办法弄得有一定结构不就行了吗?

这种想法很天然,却构成了全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引

这种说法比较抽象,举几个例子就很容易明白,比如字典,字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和 部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以 一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到 我们的非结构化数据——也即对字的解释

搜索基本的流程实现:

es的搜索 es搜索原理_搜索引擎_06

全文检索的流程分为两大流程:索引创建、搜索索引

  • 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
  • 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

es的搜索 es搜索原理_大数据_07

想搞清楚全文检索,必须要搞清楚下面三个问题:

1. 索引库里面究竟存些什么?(Index)

2. 如何创建索引?(Indexing)

3. 如何对索引进行搜索?(Search)

原始内容是指要索引和搜索的内容

原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等。

也就是采集数据,从互联网上、数据库、文件系统中等获取需要搜索的原始信息,这个过程就是信息采集。

采集数据的目的是为了将原始内容存储到document对象中

如何采集数据?

  1. 对于互联网上网页,可以使用工具将网页抓取到本地生成html文件。
  2. 数据库中的数据,可以直接连接数据库读取表中的数据。
  3. 文件系统中的某个文件,可以通过I/O操作读取文件的内容。

在Internet上采集信息的软件通常称为爬虫或蜘蛛,也称为网络机器人,爬虫访问互联网上的每一个网页,将获取到的网页内容存储起来。

创建文档的目的是统一数据格式(document),方便文档分析。

es的搜索 es搜索原理_大数据_08

说明:

  1. 一个document文档中包括多个域(Field),域(Field)中存储内容。
  2. 这里我们可以将数据库中一条记录当成一个document,一列当成一个Field

分析文档主要是对Field域进行分析,分析文档的目的是为了索引。

es的搜索 es搜索原理_数据库_09

**说明:分析文档主要通过分词组件(Tokenizer语言处理组件(Linguistic Processor)**完成

1. 分词组件

分词组件工作流程(此过程称之为Tokenize**)**

  1. 将Field域中的内容进行分词(不同语言有不同的分词规则)
  2. 去除标点符号。
  3. 去除停用词(stop word)。

**经过分词(**Tokenize)之后得到的结果成为。

所谓停词(Stop word)就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小。 英语中停词(Stop word)如:“the”,“a”,“this”等。 对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合。 示例(document1的Field域和document2的Field域是同名的):

  • document1的Field域:
  • document2的Field域:
  • 在我们的例子中,便得到以下词元(Token):

将得到的词元(Token)传给语言处理组件(Linguistic Processor)

2. 语言处理组件

将得到的词元(Token)传给语言处理组件(Linguistic Processor)

对于英语,语言处理组件(Linguistic Processor)一般做以下几点:

  1. 变为小写(Lowercase)。
  2. 将单词缩减为词根形式,如“cars”到“car”等。这种操作称为:stemming。
  3. 将单词转变为词根形式,如“drove”到“drive”等。这种操作称为:lemmatization。 语言处理组件(linguistic processor)的结果称为词(Term)。Term是索引库的最小单位。
  • 在我们的例子中,经过语言处理,得到的词**(Term)**如下:

也正是因为有语言处理的步骤,才能使搜索drove,而drive也能被搜索出来。

1. 索引库创建

索引的目的是为了搜索

es的搜索 es搜索原理_es的搜索_10

说明:将得到的词(Term)传给索引组件(Indexer),索引组件(Indexer)主要做以下几件事情:

2. 创建Term字典

在我们的例子中字典如下:

3. 排序Term字典

对字典按字母顺序进行排序

4. 合并Term字典

合并相同的词(Term)成为文档倒排(Posting List)链表

es的搜索 es搜索原理_大数据_11

在此表中,有几个定义:

  • document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。
  • Frequency 即词频率,表示此文件中包含了几个此词(Term)。

到此为止,索引已经创建好了。 最终的索引结构是一种倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。 倒排索引结构是根据内容(词汇)找文档,如下图:

es的搜索 es搜索原理_大数据_12

分词及检索的详细的流程:

es的搜索 es搜索原理_大数据_13

一次索引,多次使用。

1. 查询语句

es的搜索 es搜索原理_分布式_14

2. 执行搜索

第一步:对查询语句进行词法分析、语法分析及语言处理。 1、词法分析 如上述例子中,经过词法分析,得到单词有lucene,learned,hadoop, 关键字有AND, NOT。 注意:关键字必须大写,否则就作为普通单词处理。

es的搜索 es搜索原理_分布式_15

2、语法分析 如果发现查询语句不满足语法规则,则会报错。如lucene NOT AND learned,则会出错。 如上述例子,lucene AND learned NOT hadoop形成的语法树如下:

es的搜索 es搜索原理_分布式_16

3、语言处理 如learned变成learn等。 经过第二步,我们得到一棵经过语言处理的语法树。

es的搜索 es搜索原理_es的搜索_17

本文地址:http://changmeillh.xhstdz.com/news/6183.html    物流园资讯网 http://changmeillh.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号