一文看懂Elasticsearch的技术架构:高效、精准的搜索神器

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其强大的全文本搜索功能和快速的倒排索引技术著称。它不仅支持数字、文本、地理位置等多类型数据,还提供了可调相关度分数、高级查询 DSL 等功能。Elasticsearch 的核心技术流程包括数据导入、解析、索引化、查询处理、得分计算及结果返回,确保高效处理大规模数据并提供准确的搜索结果。通过 RESTful API、Logstash 和 Filebeat 等工具,Elasticsearch 可以从多种数据源中导入和解析数据,支持复杂的查询需求。

一、概述

Elasticsearch 以其强大的全文本搜索功能而闻名。速度之所以这么快,因为 Elasticsearch 核心采用的是倒排索引;它功能之所以这么强大,是因为采用了可调相关度分数、高级查询 DSL 以及可提升搜索能力的诸多功能。


添加图片注释,不超过 140 字(可选)


然而全文本搜索只是全球众多公司利用 Elasticsearch 解决各种挑战的冰山一角。数字、文本、地理位置、结构化数据、非结构化数据,它适用于所有数据类型。


添加图片注释,不超过 140 字(可选)


二、技术原理

Elasticsearch是一个基于Lucene的开源搜索引擎,它的技术原理主要包括以下几个方面:

将数据导入、解析、查询、得分和返回结果的全过程,描述如下:


1. 数据导入

首先,将数据导入到 Elasticsearch 是整个过程的第一步。数据可以来自多种来源,如文本文件、数据库、日志文件等。导入数据通常通过以下方式进行:


添加图片注释,不超过 140 字(可选)


  • Elasticsearch API:通过 Elasticsearch 的 RESTful API 将数据一次性或批量导入到指定的索引中。可以使用bulkAPI 来实现高效的批量导入操作。

POST /index_name/_bulk { "index": { "_index": "index_name", "_type": "_doc", "_id": "1" } } { "field1": "value1", "field2": "value2" } { "index": { "_index": "index_name", "_type": "_doc", "_id": "2" } } { "field1": "value3", "field2": "value4" }

  • Logstash:Logstash 可以作为数据收集和预处理工具,从不同的数据源(如文件、数据库)中采集数据,并将其发送到 Elasticsearch 中。
  • fileBeat:fileBeat是轻量级的数据采集器,用于实时收集和传输数据到 Elasticsearch 或 Logstash 中。

2. 数据解析和索引化

一旦数据导入到 Elasticsearch 中,它们会自动进行解析和索引化:

  • 文本分析:对于文本字段,Elasticsearch 使用预定义的分析器(或自定义分析器)进行分词、词形还原、停用词过滤等操作。这些操作生成适合建立倒排索引的词项。
  • 建立倒排索引:倒排索引将文档中的每个词项映射到包含这些词项的文档列表。这样的结构使得 Elasticsearch 能够快速定位和检索包含特定词项的文档。

3. 查询处理

数据被索引后,就可以通过 Elasticsearch 的查询 API 来检索和分析数据:

  • 查询DSL:Elasticsearch 使用结构化的 JSON 查询语言(Query DSL),支持各种查询类型,如全文搜索、精确匹配、范围查询、聚合等。

POST /index_name/_search {   "query": {     "match": {       "field_name": "search_keyword"     }   } }

4. 查询执行和得分计算

当用户发起查询时,Elasticsearch 执行以下步骤:

  • 查询解析:将用户查询解析成内部数据结构,包括词项分析和查询语法解析。
  • 倒排索引匹配:使用倒排索引快速定位包含查询词项的文档集合。
  • 相关性得分计算:根据查询条件和文档的匹配程度,计算每个文档的相关性得分。常用的算法包括 TF-IDF(词频-逆文档频率)和 BM25(最佳匹配 25)等。

5. 结果排序和返回

根据相关性得分,Elasticsearch 对搜索结果进行排序,并将最相关的文档返回给用户:

  • 结果排序:按照相关性得分(和可能的其他因素)对搜索结果进行排序,以确保最相关的文档排在前面。
  • 返回结果:返回匹配查询条件的文档,通常包括文档的ID、相关性得分以及部分或全部文档内容。可以通过分页和其他参数来控制返回结果的数量和格式。

{   "took": 5,   "timed_out": false,   "_shards": {     "total": 5,     "successful": 5,     "skipped": 0,     "failed": 0   },   "hits": {     "total": {       "value": 2,       "relation": "eq"     },     "max_score": 0.2876821,     "hits": [       {         "_index": "index_name",         "_type": "_doc",         "_id": "1",         "_score": 0.2876821,         "_source": {           "field1": "value1",           "field2": "value2"         }       },       {         "_index": "index_name",         "_type": "_doc",         "_id": "2",         "_score": 0.23560172,         "_source": {           "field1": "value3",           "field2": "value4"         }       }     ]   } }

以上便是 Elasticsearch 数据导入、解析、查询、得分计算和返回结果的全过程。通过这一流程,Elasticsearch 能够快速高效地处理大规模的文本数据,支持复杂的查询需求,并提供准确的搜索结果。


我是栈江湖,如果你喜欢此文章,不要忘记关注+点赞哦!你的支持是我创作的动力。如果你有任何意见或建议,欢迎在下方留言。若转载,请注明文章来源。


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
8天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
11天前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
|
7天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
23 0
|
1月前
|
存储 缓存 固态存储
Elasticsearch高性能搜索
【11月更文挑战第1天】
50 6
|
1月前
|
API 索引
Elasticsearch实时搜索
【11月更文挑战第2天】
50 1
|
1月前
|
存储 索引
Elasticsearch分布式架构
【11月更文挑战第2天】
33 1
|
2月前
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
185 2
|
2月前
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
54 5
|
2月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
237 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。