`
qindongliang1922
  • 浏览: 2152188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116475
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124711
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58715
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70504
社区版块
存档分类
最新评论

Elasticsearch如何检索数据

    博客分类:
  • ELK
阅读更多
我们都知道Elasticsearch是一个全文检索引擎,那么它是如何实现快速的检索呢?

传统的数据库给每个字段都存储成一个单个值,对于全文检索而言,这样的存储是低效的。举个例子,我有一个大文本字段,存到数据库里面只能是一个值,如果想要检索这个大文本字段里面的任何一个词,数据库如何实现? 只能通过like模糊查询来实现,先不说性能低,这对于一个搜索引擎是远远不够的。

针对上面数据库的不足,所以才出现了Lucene这种全文检索框架而它的核心就在于采用了倒排索引(Inverted Index)的数据结构,不同于数据库的行式存储,Lucene这里采用了列式存储的方式故而对单个字段可以支持多个值的存储,这就是倒排索引。

````
Term  | Doc 1 | Doc 2 | Doc 3 | ...
------------------------------------
brown |   X   |       |  X    | ...
fox   |   X   |   X   |  X    | ...
quick |   X   |   X   |       | ...
the   |   X   |       |  X    | ...
````


如上图所示,倒排索引的一个字段由多个Term组成,这些Term是一个有序的列表,并且是唯一不重复的。对于每一个Term又会映射上所有包含该Term的Document Id列表。


为什么谈到Lucene,因为Lucene本身只是一个全文检索工具包,它不具备企业级的一些特性,如分布式,副本,扩展等而Elasticsearch和Solr都是基于Lucene开发和扩展的企业级框架,所以了解Lucene对学习Elasticsearch和Solr会有很大帮助。


在Elasticsearch中每条数据都是一个json,实际上json中每一个字段都有它自己的倒排索引结构。

当然倒排索引中的每个Term保存的信息还有很多,比如这个Term在多少个Doucuments里面出现过的次数,在特定的Doucument里面出现的次数,每个Document的length,所有Document的平均length,这些信息是用来计算搜索的相关性(Relevance),我们都知道使用google和百度搜索结果后,数据会有个先后排名,排名靠前的基本都是最相关的数据,那么那些因素决定了数据的排名? 这里面其实就是上面所说的相关性来决定,关于相关性的计算方式也是Lucene里面的核心功能,目前Lucene里面主要有两种Rank算法:

(1)经典的基于VSM向量空间的TF/IDF算法

(2)最新的基于概率论的BM25算法

刚兴趣的朋友可以去维基百科学习一下,这里不再展开了。



早期的全文检索所有的数据都会被做成一个大的倒排索引,当新索引准备好之后,它会替代旧的大索引并且最近的变化数据可以被检索。

这个大的倒排索引有一个最大的特点就是不可变性,只要索引被写入磁盘后,就是不可变的:


优点:


(1)由于不可变性,所以不需要锁,也就是不存多个线程同时去修改数据。


(2)可以直接把索引加载到FileSystem Cache停留在cache中,因为它不会被修改并且FileSystem Cache有足够大的空间,这样以来直接在内存中查询代替在磁盘上,对搜索性能大大提升。

(3)其他的缓存如filter cache在整个index的生命周期内都是有效的,他们不会被重建,因为索引是不可变的。


(4)不可变的大索引可以得到更高的压缩比,这样以来能够节省io和占用的内存资源


缺点:

倒排索引的优点也是它的缺点,因为它不可变,所以为了使你新增的数据能够正常的搜索到,你需要重建整个索引,这严重限制了单个index存储的数量以及它的更新频率。

所以在Elasticsearch中采用了动态更新多个索引方式来解决这个问题,这个会在下篇的文章中介绍。


参考链接:

https://www.elastic.co/guide/en/elasticsearch/guide/master/inverted-index.html

https://www.elastic.co/guide/en/elasticsearch/guide/master/relevance-intro.html

https://www.elastic.co/guide/en/elasticsearch/guide/master/making-text-searchable.html


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
0
0
分享到:
评论

相关推荐

    springboot+es实现对word,pdf,txt等文件的非结构化数据全文内容检索

    使用spring boot+Elasticsearch 7.9.1+kibana 实现对word,pdf,txt等文件的非结构化数据全文内容检索

    springboot整合elasticsearch7实现es数据同步,查询、相关度排序、高亮显示、自动补全搜索等功能。

    springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个开源的高拓展的分布式全文搜索引擎它可以近乎实时的存储、检索数据;本身拓展性很好,可以拓展到上百台服务器,处理PB级别的数据。es也是用Java开发并使用...

    java api 检索elasticsearch数据

    运用elasticsearch的TransportClient api 检索数据,另外实现了数据导入导出,数据统计

    基于Springboot + ElasticSearch +Vue+MySQL构建的博客检索系统

    简易博客检索系统使用前后端分离,前端使用 Vue ,后端使用 SpringBoot 数据库 MySQL 检索使用 ElasticSearch 同步数据使用 logstash 基于Springboot + ElasticSearch +Vue+MySQL构建的博客检索系统 项目经过严格...

    elasticsearch-7.17.6及对应版本IK分词

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

    elasticsearch权威指南示例数据

    Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合: Wikipedia 使用 Elasticsearch 提供带有...

    十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统.pdf

    十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...

    elasticsearch-tableau-connector:用于 Elasticsearch 的 Tableau Web 数据连接器

    连接器的工作原理是从 Elasticsearch 检索数据的“页面”,直至达到指定的限制或达到总命中数。 如果需要,用户可以覆盖批量大小以在每页检索更多记录。演示兼容性2.3发行版(在release-2.3分支和master当前开发...

    全文检索使用ElasticSearch实现全文检索的详细说明和实践探索

    使用ElasticSearch实现全文检索是一种常见且高效的方式。下面是详细的技术实践和说明: 安装和配置ElasticSearch: 首先,需要在服务器上安装ElasticSearch,并确保其正常运行。 然后,进行相关配置,如集群名称、...

    elasticsearch 8.11.3 windows安装包

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

    elasticsearch windows 7.17.16 解压安装包

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

    ElasticSearch分布式全文检索入门视频教程

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

    ElasticSearch讲解PPT

    ElasticSearch简称es,es是一个开源的高扩展的分布式全文搜索引擎,它可以近乎实时的存储、检索数据,本身的扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也是用Java开发并使用Lucene作为核心来实现...

    人工智能-项目实践-信息检索-基于springboot-es的博客检索系统

    基于springboot-es的博客检索...2、ElasticSearch 数据类型,和关系型数据库mysql的对比 3、Mysql数据同步到ES(logstash, mysql binlog, 第三方Go框架) 4、Springboot 整合操作ES 5、ElasticSearch 安装中文分词器

    Elasticsearch总结.doc

    Elasticsearch的特性 分布式、全文检索、近实时搜索和分析、高可用、模式自由、restful 讲述Elasticsearch的架构和Elasticsearch 的核心 概念 二、索引数据 单词 文档矩阵,倒排索引,倒排索引实例,单词词典 三、...

    ElasticSearch分布式检索含中文分词

    ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。

    人工智能-项目实践-信息检索-Springboot + ElasticSearch 构建博客检索系统

    Springboot + ElasticSearch 构建博客检索系统 简易博客检索系统使用前后端分离,前端使用 Vue ,后端使用 SpringBoot 数据库 MySQL 检索使用 ElasticSearch 同步数据使用 logstash

    es-head Elasticsearch的可视化操作插件

    它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在谷歌浏览器中使用,以下是使用方法: 1.下载解压 ...

    elasticsearch 7.17.16 linux 解压安装包

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

Global site tag (gtag.js) - Google Analytics