搜索引擎 - 架构 & 原理篇
文章平均质量分 92
搜索引擎 - 架构 & 原理篇
文晓武
专注搜索推荐问答推荐工程领域,涉及到的技术有:Java、ElasticSearch、SpringBoot、SpringCloud、Dubbo、Linux、Docker、Sql、Kafka、RabbitMQ、RocketMQ、MyBatis、XXl-Job、Zookeeper、Nginx、Redis、Tomcat、Git、SVN、Maven、K8S等,每周不定期更新精华文章!
展开
-
地理空间搜索:kd树的实现原理
前情回顾:但是如果这个数据集中的训练实例非常多且密集,而且一个实例就有很多特征,那么就要计算出成千上万个距离,运算量极其庞大。这时,我们就可以用一个更快速的计算方法——kd树。kd 树从根本上看,是一个二叉树结构,根据这个结构对k维空间进行不断的划分,每一个结点就代表了k维超矩形区域。二维(k=2)的矩形区域:三维(k=3)的矩形区域:输入: k维空间数据集:xi=(xi(1),xi(2),...,xi(k))T,xi(l)的上标代表的是第l个特征值输出: kd树在根结点处选择一个最优特征进行切割,一般通过转载 2022-06-23 15:47:33 · 411 阅读 · 0 评论 -
地理空间搜索 ->R树索引
1、传统暴力求解方法的局限性。 在地理空间搜索这块,我们会常常遇到一个问题,假设我们知道了一个地点经纬度信息,我们如何检索它附近10km以内的所有的点,假设我们是用关系数据库mysql来存放的,数据库里大概有40万条数据。我们能够直觉想到的是利用球面距离公式,直接求解该地点与所有地点的距离,然后根据计算结果再进行筛选,这时候我们发现该方法的复杂度为要执行40万 * 距离函数,随着数据库地点数据的增加,该距离计算复杂度也会线性增长,我们知道,在球面距离计算公式里面有sin()、cos()、sqrt转载 2022-06-23 14:29:38 · 2749 阅读 · 0 评论 -
Elasticsearch 在地理信息空间索引的探索和演进
本文来自 vivo 互联网服务器团队- Shuai Guangying本文梳理了Elasticsearch对于数值索引实现方案的升级和优化思考,从2015年至今数值索引的方案经历了多个版本的迭代,实现思路从最初的字符串模拟到KD-Tree,技术越来越复杂,能力越来越强大,应用场景也越来越丰富。从地理位置信息建模到多维坐标,数据检索到数据分析洞察都可以看到Elasticsearch的身影。LBS服务是当前互联网重要的一环,涉及餐饮、娱乐、打车、零售等场景。在这些场景中,有很重要的一项基础能力:搜索附近的POI转载 2022-06-23 14:04:12 · 203 阅读 · 0 评论 -
Elasticsearch 性能调优:段合并(Segment merge)
Elasticsearch索引(elasticsearch index)由一个或者若干分片(shard)组成,分片(shard)通过副本(replica)来实现高可用。一个分片(share)其实就是一个Lucene索引(lucene index),一个Lucene索引(lucene index)又由一个或者若干段(segment)组成。所以,当我们查询一个Elasticsearch索引时,查询会在所有分片上执行,既而到段(segment),然后合并所有结果。此文将从segment的视角,分析如何对Elast转载 2022-06-22 16:24:52 · 1607 阅读 · 0 评论 -
lucene思维导图,让搜索引擎不再难懂
今天,我们来讲讲lucene,同学们搬好板凳坐好啦。(lucene干嘛的呀?)首先我们来看张思维导图:以上是我们java常用的全文搜索引擎框架,很多项目的搜索功能都是基于以上4个框架完成的。所以lucene到底是干啥的?Lucene是一套用于全文检索和搜索的开放源代码程序库,一个能够轻松集添加搜索功能到一个应用程序中的简单却强大的核心代码库和API。Lucene,目前最受欢迎的Java全文搜索框架。原因很简单,hibernate search、solr、elasticsearch都是基于lucene拓展出来转载 2022-06-08 17:15:00 · 379 阅读 · 0 评论 -
ES对磁盘的要求基本介绍
有一个问题被关注的比较少,就是ES对本地磁盘的占用情况。有人可能觉得这个问题的答案显而易见,不就是ES软件本身占用的空间,还有索引数据持久化占用的磁盘空间,另外就是一些日志了。事实上,关于ES占用磁盘空间的问题远比这个要复杂的多。本篇文章就想聚焦这个问题,深入ES的底层原理来分析磁盘的占用情况。是否执行分析首先对于一个索引,其中的字段在写入是,写入分析对磁盘是有影响的。那么什么是写入分析? 当我们index一个文档时,如果不指定分析器,默认使用的是standard,可以做个测试,看下默认的分析器转载 2022-04-05 23:00:04 · 1224 阅读 · 0 评论 -
ES中百亿数据如何毫秒级返回?
前言近年来公司业务迅猛发展,数据量爆炸式增长,随之而来的的是海量数据查询等带来的挑战,我们需要数据量在十亿,甚至百亿级别的规模时依然能以秒级甚至毫秒级的速度返回,这样的话显然离不开搜索引擎的帮助,在搜索引擎中,ES(ElasticSearch)毫无疑问是其中的佼佼者,连续多年在 DBRanking 的搜索引擎中评测中排名第一,也是绝大多数大公司的首选,那么它与传统的 DB 如 MySQL 相比有啥优势呢,ES 的数据又是如何生成的,数据达到 PB 时又是如何保证 ES 索引数据的实时性以更好地满足业务的转载 2022-04-05 22:44:19 · 798 阅读 · 0 评论 -
ES集群核心概念基本介绍
1)Cluster:集群ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群,集群内的节点的cluster.name相同。2)Node:节点形成集群的每个服务器称为节点。ES 为分配不同的任务,定义了以下几个节点角色:Master,Data Node,Coordinating Node,Ingest NodeMaster 节点:每个 ES 节点启动之前都会有个默认配置 node.master:t转载 2022-04-05 22:35:05 · 3395 阅读 · 0 评论 -
从Elasticsearch来看分布式系统架构设计
分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大。这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分布式搜索系统,分布式分析系统等。我们先来简单看下Elasticsearch的架构。Elasticsearch 集群架构Elasticsearch是一个非常著名的开源搜索和分析系统,目前被广泛应用于互联网多种领域中,尤其是以下三个领域特别突出。一是搜索领域,相对于solr,真正的后起之秀,成为很多搜索系统的不二之选。二是Json文档数据库,转载 2022-04-04 23:50:09 · 95 阅读 · 0 评论 -
Elasticsearch堆内存为什么建议设置为31G(小于32G)?
Elasticsearch 默认安装后设置的堆内存是 1 GB。对于任何一个业务部署来说, 这个设置都太小了。如果你正在使用这些默认堆内存配置,您的集群可能会出现问题。这里有两种方式修改 Elasticsearch 的堆内存。最简单的一个方法就是指定ES_HEAP_SIZE环境变量。服务进程在启动时候会读取这个变量,并相应的设置堆的大小。 比如,你可以用下面的命令设置它:export ES_HEAP_SIZE=10g此外,你也可以通过命令行参数的形式,在程序启动的时候把内存大小传递给它,如..转载 2022-04-04 23:31:59 · 3552 阅读 · 0 评论 -
搜索 ES 数据写入原理
前言最近 TL 分享了下 《Elasticsearch基础整理》https://www.jianshu.com/p/e82... ,蹭着这个机会。写个小文巩固下,本文主要讲 ES -> Lucene的底层结构,然后详细描述新数据写入 ES 和 Lucene 的流程和原理。这是基础理论知识,整理了一下,希望能对 Elasticsearch 感兴趣的同学有所帮助。一、Elasticsearch & Lucene 是什么什么是 Elasticsearch ?Elasticsear转载 2022-04-04 23:14:05 · 204 阅读 · 0 评论 -
分布式搜索引擎Elasticsearch的架构分析
目录二、什么是倒排索引三、ES的集群架构四、索引如何写入的4.1. 写索引原理4.1.1 分片4.1.2 副本4.1.3 Elasticsearch 的写索引流程4.2. 存储原理4.2.1 段合并五、写在最后ES(Elasticsearch下文统一称为ES)越来越多的企业在业务场景是使用ES存储自己的非结构化数据,例如电商业务实现商品站内搜索,数据指标分析,日志分析等,ES作为传统关系型数据库的补充,提供了关系型数据库不具备的一些能力。ES最先进...转载 2022-04-02 14:22:26 · 227 阅读 · 0 评论 -
搜索 ElasticSearch 快速检索的原理(深度好文)
目录一、前言二、关于搜索三、倒排索引四、关于 postings list 的一些巧技五、总结All problems in computer science can be solved by another level of indirection.”– David J. Wheeler“计算机世界就是 trade-off 的艺术”一、前言最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES转载 2022-04-02 11:05:08 · 373 阅读 · 0 评论 -
ES写数据过程&读数据过程原理解析
1. es 写数据过程客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node。coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响转载 2022-04-02 08:04:02 · 996 阅读 · 0 评论 -
搜索引擎背后的经典数据结构和算法
前言我们每天都在用 Google, 百度这些搜索引擎,那大家有没想过搜索引擎是如何实现的呢,看似简单的搜索其实技术细节非常复杂,说搜索引擎是 IT 皇冠上的明珠也不为过,今天我们来就来简单过一下搜索引擎的原理,看看它是如何工作的,当然搜索引擎博大精深,一篇文章不可能完全介绍完,我们只会介绍它最重要的几个步骤,不过万变不离其宗,搜索引擎都离不开这些重要步骤,剩下的无非是在其上添砖加瓦,所以掌握这些「关键路径」,能很好地达到观一斑而窥全貎的目的。本文将会从以下几个部分来介绍搜索引擎,会深度剖析搜索引擎的转载 2022-04-02 07:53:57 · 2411 阅读 · 0 评论 -
搜索中常见数据结构与算法探究
目录01前言02提出问题2.1.1 案例一03数据结构与算法基础3.1 数据结构基础3.1.1 什么是数据结构3.1.2 数据之间的关系3.2 算法基础3.2.1 基础概念3.2.2 数学基础3.2.3 复杂度函数3.3 知识储备3.3.1 质数分辨定理(HashTree的理论基础)04常见数据结构与算法分析4.1 线性数据结构4.1.1 HashMap4.1.2 Bloom Filter(布隆过滤器)4.1.3 SkipLi...转载 2022-04-02 07:38:56 · 288 阅读 · 0 评论