相关动态
es的搜索 es搜索原理
2024-11-10 18:42

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

    以上就是本篇文章【es的搜索 es搜索原理】的全部内容了,欢迎阅览 ! 文章地址:http://changmeillh.xhstdz.com/news/6183.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://changmeillh.xhstdz.com/mobile/ , 查看更多   
最新文章
如何打造一个高效的营销型企业网站,营销型企业网站的核心特点是什么
打造高效营销型企业网站,需关注用户体验、SEO优化、内容质量及数据分析。核心特点为:用户导向、易用性高、转化路径明确。如何
佛山专业SEO优化助力企业电商营销新飞跃
佛山商品SEO优化公司,凭借专业技术和丰富经验,为企业提供全方位互联网营销解决方案。通过精准关键词优化、内容营销、数据分析
ks秒单关注(快速秒单关注,提升用户转化率)
KS秒单关注是一种快速秒单关注的方法,旨在提升用户的转化率。这种方法通过一系列的策略和技巧,能够快速吸引用户的关注,并使他
密码技术应用员理论知识题及答案.docVIP
PAGEPAGE1密码技术应用员理论知识题及答案单选题1.密码系统试运行报告中,记录的每个问题均应具备唯一标识,其作用是()。A、描
外链自动增加:全面解析和战略规划198
引言外链是搜索引擎优化 (SEO) 至关重要的组成部分,可以提高网站在搜索结果页面 (SERP) 中的排名。然而,有时网站可能会经历外
OpenAI 与马斯克“恩怨”再升级!公开历史邮件,揭秘“控制权”争夺战
OpenAI 与马斯克的法律战已持续数月,核心争议点在于 OpenAI 是否背离了其最初的非营利使命,即让 AI 研究成果惠及所有人。上个
AI智能写作助手:一站式文案创作与优化解决方案,覆多种场景需求
1. 文案生成器是一款利用先进的人工智能技术帮助客户快速生成创意文案的工具。它免费采用可以按照使用者输入的关键词或主题,自
07 高性能系统架构设计
本课时讲解大家常听到的高性能系统架构。 高性能系统架构,主要包括两部分内容,性能测试与性能优化。性能优化又可
百度营销黑帽seo【百度seo营销公司】
在当今数字化的时代,搜索引擎优化(SEO)已经成为了企业网站推广的重要手段,百度作为中国(黑帽seo)的搜索引擎,拥有庞大的用户
相关文章