精华内容
下载资源
问答
  • 搜索引擎的工作流程
    千次阅读
    2020-08-26 11:17:18

    搜索引擎工作的大体流程是什么样子呢?我们可以理解为三段式。

    一.网页搜集

    网页搜集,其实就是大家常说的蜘蛛抓取网页。那么对于蜘蛛(google称之为机器人)来说,他们感兴趣的页面分为三类:

    1.蜘蛛从未抓去过的新页面。

    2.蜘蛛抓去过,但页面内容有改动的页面。

    3.蜘蛛抓取过,但现在已删除了的页面。

    那么如何行之有效的发现这三类页面并进行抓取,就是spider程序设计的初衷与目的。那么这里就涉及到一个问题,蜘蛛抓取的起始点。

    每一位站长只要你的网站没有被严重降权,那么通过网站后台的服务器,你都可以发现勤劳的蜘蛛光顾你的站点,但是你们有没有想过从编写程序的角度上来说,蜘蛛是怎么来的呢?针对于此,各方有各方的观点。有一种说法,说蜘蛛的抓取是从种子站(或叫高权重站),依照权重由高至低逐层出发的。另一种说法蜘蛛爬在URL集合中是没有明显先后顺序的,搜索引擎会根据你网站内容更新的规律,自动计算出何时是爬取你网站的最佳时机,然后进行抓取。

    其实对于不同的搜索引擎,其抓取出发点定然会有所区别,针对于百度,Mr.Zhao较为倾向于后者。在百度官方博客发布的《索引页链接补全机制的一种办法》(地址:http://stblog.baidu-tech.com/?p=2057)一文中,其明确指出“spider会尽量探测网页的发布周期,以合理的频率来检查网页”,由此我们可以推断,在百度的索引库中,针对每个URL集合,其都计算出适合其的抓取时间以及一系列参数,然后对相应站点进行抓取。

    那么蜘蛛如何发现新链接呢?其依靠的就是超链接。我们可以把所有的互联网看成一个有向集合的聚集体,蜘蛛由起始的URL集合A沿着网页中超链接开始不停的发现新页面。在这个过程中,每发现新的URL都会与集合A中已存的进行比对,若是新的URL,则加入集合A中,若是已在集合A中存在,则丢弃掉。蜘蛛对一个站点的遍历抓取策略分为两种,一种是深度优先,另一种就是宽度优先。但是如果是百度这类商业搜索引擎,其遍历策略则可能是某种更加复杂的规则,例如涉及到域名本身的权重系数、涉及到百度本身服务器矩阵分布等。

    二.预处理

    预处理是搜索引擎最复杂的部分,基本上大部分排名算法都是在预处理这个环节生效。那么搜索引擎在预处理这个环节,针对数据主要进行以下几步处理:

    1.提取关键词

    蜘蛛抓取到的页面与我们在浏览器中查看的源码是一样的,通常代码杂乱无章,而且其中还有很多与页面主要内容是无关的。由此,搜索引擎需要做三件事情:代码去噪。去除掉网页中所有的代码,仅剩下文本文字。②去除非正文关键词。例如页面上的导航栏以及其它不同页面共享的公共区域的关键词。③去除停用词。停用词是指没有具体意义的词汇,例如“的”“在”等。

    当搜索引擎得到这篇网页的关键词后,会用自身的分词系统,将此文分成一个分词列表,然后储存在数据库中,并与此文的URL进行一一对应。下面我举例说明。

    假如蜘蛛爬取的页面的URL是A,而搜索引擎在此页面经过上述操作后提取到的关键词集合为p,且p是由关键词p1,p2,……,pn组成,则在百度数据库中,其相互间的关系是一一对应,如下图。

    2.消除重复与转载网页

    每个搜索引擎其识别重复页面的算法均不相同,但是其中Mr.Zhao认为,如果将消重算法理解为由100个元素组成,那么所有的搜索引擎恐怕其80个元素都是完全一样的。而另外20个元素,则是根据不同的搜索引擎针对seo的态度不同,而专门设立的对应策略。本文仅对搜索引擎大体流程进行初步讲解,具体数学模型不多做讲解。

    3.重要信息分析

    在进行代码除噪的过程中,搜索引擎并非简单的将其去除掉而已,而是充分利用网页代码(例如H标签、strong标签)、关键词密度、内链锚文本等方式分析出此网页中最重要的词组。

    4.网页重要度分析

    通过指向该网页的外链锚文本所传递的权重数值,来为此网页确定一个权重数值,同时结合上述的“重要信息分析”,从而确立此网页的关键词集合p中每一个关键词所具备的排名系数。

    5.倒排文件

    正如上文所说,用户在查询时所得到的查询结果并非是及时的,而是在搜索引擎的缓存区已经大体排好的,当然搜索引擎不会未卜先知,他不会知道用户会查询哪些关键词,但是他可以建立一个关键词词库,而当其处理用户查询请求的时候,会将其请求按照词库进行分词。那么这样下来,搜索引擎就可以在用户产生查询行为之前,将词库中的每一个关键词其对应的URL排名先行计算好,这样就大大节省了处理查询的时间了。

    简单来说,搜索引擎用控制器来控制蜘蛛爬取,然后将URL集与原始数据库进行保存,保存之后再用索引器控制每

    个关键词与URL之间的对应关系,并将其保存在索引数据库中。

    三、查询服务

    查询服务顾名思义,就是处理用户在搜索界面的查询请求。搜索引擎构建检索器,然后分三步来处理请求。

    1.根据查询方式与关键词进行切词。

    首先先把用户搜索的关键词切分为一个关键词序列,我们暂时用q来表示,则用户搜索的关键词q被切分为q={q1,q2,q3,……,qn}。

    然后再根据用户查询方式,例如是所有词连在一起,还是中间有空格等,以及根据q中不同关键词的词性,来确定所需查询词中每一个词在查询结果的展示上所占有的重要性。

    2.搜索结果排序

    我们有了搜索词集合q,q中每个关键词所对应的URL排序——索引库,同时也根据用户的查询方式与词性计算出每个关键词在查询结果的展示上所占有的重要,那么只需要进行一点综合性的排序算法,搜索结果就出来了。

    3.展示搜索结果与文档摘要

    当有了搜索结果后,搜索引擎就会将搜索结果展示在用户阅览的界面上以供用户使用。

    个人搜索引擎项目:
    海豚搜索 www.haiteem.com

    联系我:
    在这里插入图片描述

    我也是一个歌手哦 网易云主页

    更多相关内容
  • 2019年常见的五大搜索引擎推广方法介绍.doc.pdf2019年常见的五大搜索引擎推广方法介绍.doc.pdf2019年常见的五大搜索引擎推广方法介绍.doc.pdf2019年常见的五大搜索引擎推广方法介绍.doc.pdf2019年常见的五大搜索引擎...
  • 搜索引擎不收录网站页面的常见原因解析
  • 在全面讲解“霸屏营销”整体的操作方式时,我们首页要了解的是目前“霸屏营销”的种类。...互联网发展到今天,搜索引擎该修复的漏洞也已修复,该推出的算法也已推出,所以目前常见的霸屏营销的方式有:
  • 几种常见搜索引擎的性能比较与分析.doc
  • 搜索引擎是帮助用户查找存储在个人电脑、计算机网络互联网上的信息的件程序。用户输入搜索项目,通常是通过录入一个关键词或短语,搜索引擎通过描被搜索的计算机和计算机网络,或者分解(分析)它们数据的索引,返回...
  • 搜索引擎常见的高级搜索语句
  • 几种常见搜索引擎的性能比较与分析2.doc
  • 搜索引擎的整体框架是怎样的?包含哪些核心技术?· 网络爬虫的基本架构是什么?常见的爬取策略是什么?什么是暗网爬取?如何构建分布式爬虫?百度的阿拉丁计划是什么?· 什么是倒排索引?如何对倒排索引进行数据...
  • 这就是搜索引擎

    2019-04-27 11:51:11
    这就是搜索引擎 核心技术详解 张俊林 著 带书签 这本书是写给谁的 如果您是下列人员之一,那么本书就是写给您的。 1. 对搜索引擎核心算法有兴趣的技术人员 • 搜索引擎的整体框架是怎样的?包含哪些核心技术? • ...
  • 公布源码前,请允许我对常见的网盘搜索引擎原理做介绍,目前国内的网盘搜索引擎分两种:前一种google自定义搜索,拥有自主爬虫,索引程序,再说后一种,这一种就比较有难度了,核心部分包括爬虫+索引,这是部分核心...
  • 本文是描述搜索引擎的核心工作原理的文档,从搜索引擎的 内容抓取(Spider)、分词(NLP)、索引构建(Index)、内容相关性(Document Rank)排序等几个方面进行介绍,希望能够提供系统性的学习和了解搜索引擎内部...

    【原创】全文搜索引擎技术原理入门

    作者:黑夜路人(heiyeluren / Black)

    时间:2021/11

    文档:《全文搜索引擎技术原理入门》- 黑夜路人


        

            信息检索(Information Retrieval)的含义可以是非常广泛的,作为一个学术研究领域,信息检索可能如此定义:信息检索(IR)是从集合(通常存储在计算机中)中找到满足信息需求的非结构化性质(通常是文本)的材料(通常是文档),信息检索是解决信息存储和检索的一门学科。

        信息检索(IR)是基于用于查询检索信息的任务,目前流行的信息检索模型包括 布尔模型、向量空间模型、概率模型和语言模型,信息检索最典型和最常见的应用是“搜索引擎”(Search Engine)。

        搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上采集信息(主动采集或被动接收信息),在对信息进行组织和处理后,为用户提供检索服务,将检索的相关信息展示给用户的系统。

        搜索引擎是工作于互联网上的一门检索技术,它指在提高人们获取搜集信息的速度,为人们提供更好的网络使用环境。从功能和原理上搜索引擎大致被分为全文搜索引擎、元搜索引擎、垂直搜索引擎和目录搜索引擎等四大类,目前一般通俗提到“搜索引擎”主要是指“全文搜索引擎”。 

        搜索引擎发展到今天,在日常工作生活中都已经离不开了,目前的搜索引擎技术在基础架构和算法在技术上都已经非常成熟,发展成为根据一定的策略(机器学习)、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后(构建高质量索引),为用户提供高质量的检索服务,将用户检索最相关或是用户最想要(通过机器学习/深度学习方式)的信息展示给用户的一套系统。

        本篇分享内容主要是介绍搜索引擎(全文搜索技术)的基本实现原理机制的一个入门,能够快速通过几十页的内容,对搜索引擎技术有一个概要的、系统性的了解,帮助我们在工作中无论是使用通用的全网搜索引擎(谷歌/百度等),还是使用站内全文搜索引擎(Lucene/ES/Solr/Sphinx等),都能够有一个对原理理念层面的了解,能够更快速的帮助我们更深入的做好技术研发。

        内容会描述搜索引擎的概要构成和主要的工作流程,从搜索引擎的 内容抓取(Spider)、分词(NLP)、索引构建(Index)、内容相关性(Document Rank)排序等几个方面进行介绍,希望能够提供系统性的学习和了解。

    • 内容抓取:爬虫程序的基本工作流程,主流爬虫介绍,爬虫Scrapy介绍

    • 内容分析:网页分析(HTML解析)、网页去重算法(Shinling/I-Match/SimHash等),中文分词技术(主要实现方法、包括基于字典-正向逆向最大匹配/最小切分/MMSeg、基于统计学、基于深度学习等方法-条件随机场CRF/隐形马尔科夫模型HMM/N-gram,主流开源哪些实现)

    • 索引系统:搜索索引系统的构建,包括正排索引、倒排索引等等(与传统数据库数据结构B+树/LSM树的区别),核心数据结构实现机制(Lucene中的实现过程)

    • 检索系统:搜索引擎检索(查询)过程(包括布尔查询、字段查询等),全文检索排序技术(布尔模型、向量空间、概率检索等相关性排序技术),包括主流的一些算法介绍 余弦相关性、BM25、TF-IDF等等。

    • 最后在推荐一部分包括ES/Lucene等在内的开源搜索引擎进行进一步学习

    核心重点内容会在 分词技术(Segmention term)、倒排索引构建(Inverted index)、搜索结果相关性排序(Document rank)等几个重点全文搜索引擎技术上面进行介绍,希望您有所收获。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    希望您学习完本篇文章能够对全文搜索引擎技术有一定的了解,能有一些学习和收获,如果想加入技术群交流请扫码加微信一起交流。


     

    该原创文档PDF下载:

    《全文搜索引擎技术原理入门》黑夜路人

    展开全文
  • ElasticSearch搜索引擎常见面试题总结

    万次阅读 多人点赞 2021-04-10 22:12:52
    Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。 全文检索是指对每一个词建立一个索引,指明该词在文章中出现的次数和位置...

    一、ElasticSearch基础:

    1、什么是Elasticsearch:

            Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。

    全文检索是指对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当查询时,根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

    2、Elasticsearch 的基本概念:

    (1)index 索引:索引类似于mysql 中的数据库,Elasticesearch 中的索引是存在数据的地方,包含了一堆有相似结构的文档数据。

    (2)type 类型:类型是用来定义数据结构,可以认为是 mysql 中的一张表,type 是 index 中的一个逻辑数据分类

    (3)document 文档:类似于 MySQL 中的一行,不同之处在于 ES 中的每个文档可以有不同的字段,但是对于通用字段应该具有相同的数据类型,文档是es中的最小数据单元,可以认为一个文档就是一条记录。

    (4)Field 字段:Field是Elasticsearch的最小单位,一个document里面有多个field

    (5)shard 分片:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。

    (6)replica 副本:任何服务器随时可能故障或宕机,此时 shard 可能会丢失,通过创建 replica 副本,可以在 shard 故障时提供备用服务,保证数据不丢失,另外 replica 还可以提升搜索操作的吞吐量。

    shard 分片数量在建立索引时设置,设置后不能修改,默认5个;replica 副本数量默认1个,可随时修改数量;

    3、什么是倒排索引:

            在搜索引擎中,每个文档都有对应的文档 ID,文档内容可以表示为一系列关键词的集合,例如,某个文档经过分词,提取了 20 个关键词,而通过倒排索引,可以记录每个关键词在文档中出现的次数和出现位置。也就是说,倒排索引是 关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了该关键词。

    要注意倒排索引的两个细节:

    • 倒排索引中的所有词项对应一个或多个文档
    • 倒排索引中的词项 根据字典顺序升序排列

    4、doc_values 的作用:

            倒排索引虽然可以提高搜索性能,但也存在缺陷,比如我们需要对数据做排序或聚合等操作时,lucene 会提取所有出现在文档集合的排序字段,然后构建一个排好序的文档集合,而这个步骤是基于内存的,如果排序数据量巨大的话,容易造成内存溢出和性能缓慢。

            doc_values 就是 es 在构建倒排索引的同时,会对开启 doc_values 的字段构建一个有序的 “document文档 ==> field value” 的列式存储映射,可以看作是以文档维度,实现了根据指定字段进行排序和聚合的功能,降低对内存的依赖。另外 doc_values 保存在操作系统的磁盘中,当 doc_values 大于节点的可用内存,ES可以从操作系统页缓存中加载或弹出,从而避免发生内存溢出的异常,但如果 docValues 远小于节点的可用内存,操作系统就自然将所有 doc_values 存于内存中(堆外内存),有助于快速访问。

    更多 doc_values 的介绍与使用欢迎阅读这篇文章:ElasticSearch搜索引擎:doc_values详细介绍

    5、text 和 keyword类型的区别:

            两个类型的区别主要是分词:keyword 类型是不会分词的,直接根据字符串内容建立倒排索引,所以keyword类型的字段只能通过精确值搜索到;Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立倒排索引

    6、query 和 filter 的区别?

    (1)query:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;

    (2)filter:查询操作仅判断是否满足查询条件,不会计算任何分值,也不会关心返回的排序问题,同时,filter 查询的结果可以被缓存,提高性能。

    二、ES的写入流程:

    1、ES写数据的整体流程:

    • (1)客户端选择 ES 的某个 node 发送请求过去,这个 node 就是协调节点 coordinating node
    • (2)coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)
    • (3)实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 
    • (4)coordinating node 等到 primary node 和所有 replica node 都执行成功之后,最后返回响应结果给客户端。

    2、ES主分片写数据的详细流程:

    Elasticsearch索引文档的过程

    (1)主分片先将数据写入ES的 memory buffer,然后定时(默认1s)将 memory buffer 中的数据写入一个新的 segment 文件中,并进入操作系统缓存 Filesystem cache(同时清空 memory buffer),这个过程就叫做 refresh;每个 segment 文件实际上是一些倒排索引的集合, 只有经历了 refresh 操作之后,这些数据才能变成可检索的。

    ES 的近实时性:数据存在 memory buffer 时是搜索不到的,只有数据被 refresh 到  Filesystem cache 之后才能被搜索到,而 refresh 是每秒一次, 所以称 es 是近实时的;可以手动调用 es 的 api 触发一次 refresh 操作,让数据马上可以被搜索到;

    (2)由于 memory Buffer 和 Filesystem Cache 都是基于内存,假设服务器宕机,那么数据就会丢失,所以 ES 通过 translog 日志文件来保证数据的可靠性,在数据写入 memory buffer 的同时,将数据也写入 translog 日志文件中,当机器宕机重启时,es 会自动读取 translog 日志文件中的数据,恢复到 memory buffer 和 Filesystem cache 中去。

    ES 数据丢失的问题:translog 也是先写入 Filesystem cache,然后默认每隔 5 秒刷一次到磁盘中,所以默认情况下,可能有 5 秒的数据会仅仅停留在 memory buffer 或者 translog 文件的 Filesystem cache中,而不在磁盘上,如果此时机器宕机,会丢失 5 秒钟的数据。也可以将 translog 设置成每次写操作必须是直接 fsync 到磁盘,但是性能会差很多。

    (3)flush 操作:不断重复上面的步骤,translog 会变得越来越大,不过 translog 文件默认每30分钟或者 阈值超过 512M 时,就会触发 commit 操作,即 flush操作,将 memory buffer 中所有的数据写入新的 segment 文件中, 并将内存中所有的 segment 文件全部落盘,最后清空 translog 事务日志。

    • ① 将 memory buffer 中的数据 refresh 到 Filesystem Cache 中去,清空 buffer;
    • ② 创建一个新的 commit point(提交点),同时强行将 Filesystem Cache 中目前所有的数据都 fsync 到磁盘文件中;
    • ③ 删除旧的 translog 日志文件并创建一个新的 translog 日志文件,此时 commit 操作完成

    更多 ES 的数据写入流程的说明欢迎阅读这篇文章:ElasticSearch搜索引擎:数据的写入流程

    三、ES的更新和删除流程:

            删除和更新都是写操作,但是由于 Elasticsearch 中的文档是不可变的,因此不能被删除或者改动以展示其变更;所以 ES 利用 .del 文件 标记文档是否被删除,磁盘上的每个段都有一个相应的.del 文件

    (1)如果是删除操作,文档其实并没有真的被删除,而是在 .del 文件中被标记为 deleted 状态。该文档依然能匹配查询,但是会在结果中被过滤掉。

    (2)如果是更新操作,就是将旧的 doc 标识为 deleted 状态,然后创建一个新的 doc。

            memory buffer 每 refresh 一次,就会产生一个 segment 文件 ,所以默认情况下是 1s 生成一个 segment 文件,这样下来 segment 文件会越来越多,此时会定期执行 merge。每次 merge 的时候,会将多个 segment 文件合并成一个,同时这里会将标识为 deleted 的 doc 给物理删除掉,不写入到新的 segment 中,然后将新的 segment 文件写入磁盘,这里会写一个 commit point ,标识所有新的 segment 文件,然后打开 segment 文件供搜索使用,同时删除旧的 segment 文件

    有关segment段合并过程,欢迎阅读这篇文章:Elasticsearch搜索引擎:ES的segment段合并原理

    四、ES的搜索流程:

    搜索被执行成一个两阶段过程,即 Query Then Fetch:

    1、Query阶段:

            客户端发送请求到 coordinate node,协调节点将搜索请求广播到所有的 primary shard 或 replica,每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。接着每个分片返回各自优先队列中 所有 docId 和 打分值 给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。

    2、Fetch阶段:

            协调节点根据 Query阶段产生的结果,去各个节点上查询 docId 实际的 document 内容,最后由协调节点返回结果给客户端。

    • coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin 随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。
    • 接收请求的 node 返回 document 给 coordinate node 。
    • coordinate node 返回 document 给客户端。

            Query Then Fetch 的搜索类型在文档相关性打分的时候参考的是本分片的数据,这样在文档数量较少的时候可能不够准确,DFS Query Then Fetch 增加了一个预查询的处理,询问 Term 和 Document frequency,这个评分更准确,但是性能会变差。

    五、ES在高并发下如何保证读写一致性?

    (1)对于更新操作:可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖

    每个文档都有一个_version 版本号,这个版本号在文档被改变时加一。Elasticsearch使用这个 _version 保证所有修改都被正确排序,当一个旧版本出现在新版本之后,它会被简单的忽略。

    利用_version的这一优点确保数据不会因为修改冲突而丢失,比如指定文档的version来做更改,如果那个版本号不是现在的,我们的请求就失败了。

    (2)对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,副本将会在一个不同的节点上重建。

    • one:写操作只要有一个primary shard是active活跃可用的,就可以执行
    • all:写操作必须所有的primary shard和replica shard都是活跃可用的,才可以执行
    • quorum:默认值,要求ES中大部分的shard是活跃可用的,才可以执行写操作

    (3)对于读操作,可以设置 replication 为 sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置replication 为 async 时,也可以通过设置搜索请求参数 _preference 为 primary 来查询主分片,确保文档是最新版本。

    六、ES集群如何选举Master节点:

    1、Elasticsearch 的分布式原理:

            Elasticsearch 会对存储的数据进行切分,划分到不同的分片上,同时每一个分片会生成多个副本,从而保证分布式环境的高可用。ES集群中的节点是对等的,节点间会选出集群的 Master,由 Master 会负责维护集群状态信息,并同步给其他节点。

    Elasticsearch 的性能会不会很低:不会,ES只有建立 index 和 type 时需要经过 Master,而数据的写入有一个简单的 Routing 规则,可以路由到集群中的任意节点,所以数据写入压力是分散在整个集群的。

    2、ES集群 如何 选举 Master:

            Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和 Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分;

    • (1)确认候选主节点的最少投票通过数量(elasticsearch.yml 设置的值 discovery.zen.minimum_master_nodes)
    • (2)选举时,集群中每个节点对所有 master候选节点(node.master: true)根据 nodeId 进行字典排序,然后选出第一个节点(第0位),暂且认为它是master节点。
    • (3)如果对某个节点的投票数达到阈值,并且该节点自己也选举自己,那这个节点就是master;否则重新选举一直到满足上述条件。

    补充:master节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data节点可以关闭http功能。

    3、Elasticsearch是如何避免脑裂现象:

    (1)当集群中 master 候选节点数量不小于3个时(node.master: true),可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes),设置超过所有候选节点一半以上来解决脑裂问题,即设置为 (N/2)+1;

    (2)当集群 master 候选节点 只有两个时,这种情况是不合理的,最好把另外一个node.master改成false。如果我们不改节点设置,还是套上面的(N/2)+1公式,此时discovery.zen.minimum_master_nodes应该设置为2。这就出现一个问题,两个master备选节点,只要有一个挂,就选不出master了

    七、建立索引阶段性能提升方法:

    • (1)如果是大批量导入,可以设置 index.number_of_replicas: 0 关闭副本,等数据导入完成之后再开启副本
    • (2)使用批量请求并调整其大小:每次批量数据 5–15 MB 大是个不错的起始点。
    • (3)如果搜索结果不需要近实时性,可以把每个索引的 index.refresh_interval 改到30s
    • (4)增加 index.translog.flush_threshold_size 设置,从默认的 512 MB 到更大一些的值,比如 1 GB
    • (5)使用 SSD 存储介质
    • (6)段和合并:Elasticsearch 默认值是 20 MB/s。但如果用的是 SSD,可以考虑提高到 100–200 MB/s。如果你在做批量导入,完全不在意搜索,你可以彻底关掉合并限流。

    八、ES的深度分页与滚动搜索scroll

    (1)深度分页:

            深度分页其实就是搜索的深浅度,比如第1页,第2页,第10页,第20页,是比较浅的;第10000页,第20000页就是很深了。搜索得太深,就会造成性能问题,会耗费内存和占用cpu。而且es为了性能,他不支持超过一万条数据以上的分页查询。那么如何解决深度分页带来的问题,我们应该避免深度分页操作(限制分页页数),比如最多只能提供100页的展示,从第101页开始就没了,毕竟用户也不会搜的那么深。

    (2)滚动搜索:

            一次性查询1万+数据,往往会造成性能影响,因为数据量太多了。这个时候可以使用滚动搜索,也就是 scroll。 滚动搜索可以先查询出一些数据,然后再紧接着依次往下查询。在第一次查询的时候会有一个滚动id,相当于一个锚标记 ,随后再次滚动搜索会需要上一次搜索滚动id,根据这个进行下一次的搜索请求。每次搜索都是基于一个历史的数据快照,查询数据的期间,如果有数据变更,那么和搜索是没有关系的。


    相关阅读:

    Spring常见面试题总结

    SpringMVC常见面试题总结

    Mybatis常见面试题总结

    MySQL常见面试题总结

    Redis常见面试题总结

    RabbitMQ消息队列常见面试题总结

    ElasticSearch搜索引擎常见面试题总结

    计算机网络常见面试题总结

    操作系统常见面试题总结

    Java基础、集合、多线程常见面试题总结

    Java虚拟机常见面试题总结

    Java常见设计模式总结

    海量数据处理的方法总结

    展开全文
  • 数据库搜索引擎介绍

    千次阅读 2022-03-17 07:36:36
    本篇文章是对于数据库事务,索引和搜索引擎的一些简单理解,也希望通过这一篇文章的输出让自己对于数据库相关的知识了解的更加清楚。

    1、 索引

    1.1 、索引的定义及优缺点

    索引的定义:索引是对数据库表的一列或者多列的值进行排序一种结构,使用索引可以快速访问数据表中的特定信息。

    通俗来讲,索引就是数据库表的一个目录,通过索引,我们可以迅速的找到数据库中的数据,并进行相应的增删改查等操作。

    索引的使用大大加快数据检索的速度,将随机I/O变成顺序I/O(因为B+树的叶子节点是连接在一起的),加速表与表之间的连接,使得我们查询数据更为方便,因此我们在执行数据库查询时,基本离不开索引,但与此同时,他也有一定缺点,从空间角度考虑,建立索引需要占用物理空间,其会占用计算机的内存,因而我们在数据库优化时会尽量减少索引的建立;从时间角度考虑,创建和维护索引都需要花费时间,例如对数据进行增删改的时候都需要维护索引,因此在创建索引时,我们应当要注意不能创建太多索引。

    1.2 索引的数据结构

    索引的数据结构主要有B+树和哈希表,对应的索引分别为B+树索引和哈希索引。InnoDB引擎的索引类型有B+树索引和哈希索引,默认的索引类型为B+树索引。一般来说,我们在查询时更多的是用B+数,其原因是其查找的效率非常高,并且支持排序和范围查找;哈希索引一般多用于精确的等值查找。

    MySQL主要的索引类型主要有FULLTEXT,HASH,BTREE,RTREE。

    FULLTEXT:FULLTEXT即全文索引,MyISAM存储引擎和InnoDB存储引擎在MySQL5.6.4以上版本支持全文索引,一般用于查找文本中的关键字,而不是直接比较是否相等,多在CHAR,VARCHAR,TAXT等数据类型上创建全文索引。全文索引主要是用来解决WHERE name LIKE "%zhang%"等针对文本的模糊查询效率低的问题。

    HASH:HASH即哈希索引,哈希索引多用于等值查询,时间复杂夫为o(1),效率非常高,但不支持排序、范围查询及模糊查询等。

    BTREE:BTREE即B+树索引,INnoDB存储引擎默认的索引,支持排序、分组、范围查询、模糊查询等,并且性能稳定。

    RTREE:RTREE即空间数据索引,多用于地理数据的存储,相比于其他索引,空间数据索引的优势在于范围查找

    1.1.3、索引的分类

           1、唯一索引: 是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复。

      2、非唯一索引: 是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中可以重复,不要求唯一。

      3、主键索引(主索引): 是唯一索引的特定类型。表中创建主键时自动创建的索引,一个表只能建立一个主索引。

      4、聚集索引(聚簇索引、Innodb):表中记录的物理顺序与键值的索引顺序相同。 因为真实数据的物理顺序只有一种,所以一个表只能有一个聚集索引。叶子节点(B+树)存储真实的数据行,不再有另外单独的数据页。

      5、非聚集索引(Mylsam):表中记录的物理顺序与键值的索引顺序不同。这也是非聚集索引与聚集索引的根本区别。叶子节点并非数据节点,而是每一个指向真正数据行的指针。

      

    聚簇索引和非聚簇索引最主要的区别是数据和索引是否分开存储

    • 聚簇索引:将数据和索引放到一起存储,索引结构的叶子节点保留了数据行。
    • 非聚簇索引:将数据进和索引分开存储,索引叶子节点存储的是指向数据行的地址。

    2 数据库引擎

    2.1 数据库引擎的定义及理解

    数据库引擎简单来说就是一个"数据库发动机"。当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是 通过数据库引擎去访问数据库文件。以关系型数据库为例,你发SQL语句给数据库引擎, 数据库引擎解释SQL语句,提取出你需要的数据返回给你。因此,对访问者来说,数据库引擎就是SQL语句的解释器。正式来说,数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可以 控制访问权限并快速处理事务,从而满足企业内大多数需要 处理大量数据的应用程序的要求,这包括 创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)

     参见blog:(176条消息) 数据库引擎学习总结_gentelyang的博客-CSDN博客_数据库引擎

    2.2、数据库引擎的任务

    1:设计并创建数据库以保存系统所需要的关系或xml文档

    2:实现系统以访问或更改数据库中存储的数据,实现网站或使用数据的应用程序,包括使用SOL Server工具和使用工具已使用数据的过程。

    3:为单位或用户部署实现的系统

    4:提供日常管理支持优化数据库的性能。

    2.3、引擎的类别

    常见的数据库引擎类别包括ISAM、MYISAM,HEAP和INNODB,其是mysql数据库的有机组成部分,在数据查询中起到了非常重要的作用。其详细介绍如下:

    ISAM
    ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。

    MyISAM
    MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的MyISAMPack工具。

    HEAP
    HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。让我再重复一遍:在你用完表格之后,不要忘记删除表格。

    InnoDB和Berkley DB
    InnoDB和Berkley DB(BDB)数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MySQL++ API。在使用MySQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。

    2.4、InnoDB引擎和MyISAM引擎的区别

    在InnoDB存储引擎中,默认的索引为B+树索引,利用主键创建的索引为主索引,也是聚簇索引,在主索引之上创建的索引为辅助索引,也是非聚簇索引。为什么说辅助索引是在主索引之上创建的呢,因为辅助索引中的叶子节点存储的是主键。

    在MyISAM存储引擎中,默认的索引也是B+树索引,但主索引和辅助索引都是非聚簇索引,也就是说索引结构的叶子节点存储的都是一个指向数据行的地址。并且使用辅助索引检索无需访问主键的索引。

    3 数据库事务

    3.1、事务的四大特性

    原子性:事务是最小的执行单位,要么全部执行,要么全部不执行

    一致性:执行事务前后,数据保持一致,多个事务读取的结果是相同的

    隔离性:并发访问数据时,一个用户事务不会被其他事务所干扰

    持久性:事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。


    3.2 事务的隔离级别

    事务的隔离级别共有四种,包括读未提交、读以提交、可重复读、可序列化,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

    Read uncommitted 读未提交:事务B读取了事务A尚未提交的数据,可能出现脏读

    Read committed 读提交:事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变,避免了脏读,但是可能会造成不可重复读

    Repeatable read 重复读: ,避免了不可重复读,但还有可能出现幻读。注:MySQL的默认隔离级别就是Repeatable read。

    Serializable 序列化:Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

    1.3.3、重复读与幻读

    重复读是为了保证在一个事务中,相同查询条件下读取的数据值不发生改变,但是不能保证下次同样条件查询,结果记录数不会增加。

    幻读就是为了解决这个问题而存在的,他将这个查询范围都加锁了,所以就不能再往这个范围内插入数据,这就是SERIALIZABLE 隔离级别做的事情。

    4 、索引,引擎和事务的联系

    4.1 三者的关系

    通俗来说,索引是数据库查询,编写数据的一个目录,引擎可以说是数据库与外界交互的一个工具,而事务则是决定数据库与外界业务交付的最小单位。通过对于数据库索引,引擎以及事务的认识,我们才能更清楚了解和掌握数据库是如何使用的。也可以通过此来了解和掌握mysql以及和mysqls数据库相关的事务,也能更清楚如何对sql语句进行优化以及优化数据库表。

    4.2.mysql中的数据库索引以及引擎

    MySQL主要的索引类型主要有FULLTEXT,HASH,BTREE,RTREE。分别是全文索引,哈希索引,B+树索引,以及即空间数据索引,他们共同构成了数据库的INnoDB,MYISAM以及HEAP等基本存储引擎和查找引擎,也使得数据库有众多功能,可以支持排序、分组、范围查询、模糊查询等操作,使得数据可以发挥其生产力。

    而其与外界交互的sql语句则共同组成了一个个事务,使得数据的操作成为一个个完整的事件,从而能够通过组合来反映我们世界的变化,从而助力与我们生活中的方方面面,发挥其独特的功能。比如通过mysql中表格数据的不同查询条件,我们可以得出和筛选出不同人的得分情况,从而

    4.3 其他数据库的设计以及思考

    4.3 .1 Oracle数据库的引擎

    oracle中不存在引擎的概念,数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

    OLTP和OLAP的区别

    OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
    OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 

     

    参见blog:https://blog.csdn.net/cafucwxy/article/details/78319414

    4.3.2 Sqlite数据库设计

    sqlite数据库设计是以零配置而生效的,具有可兼得性,

    4.3.3 redis数据库

    4.3.4 mongoDB

    4.3.5 hBase数据库

    5.数据库优化策略

    1、索引优化

    2、分库分表

    3、其他


    参考资料:https://blog.csdn.net/lydon1314/article/details/121479989

    展开全文
  • 常见的百度云搜索引擎入口合集

    万次阅读 2018-05-11 17:37:39
    百度云是百度面向大众...答案便是使用百度云搜索引擎,百度云搜索引擎和我们常见搜索引擎道理是一样的,只不过百度云搜索引擎只抓取百度云里面的文件!下面给大家推荐几个常见的百度云搜索引擎入口: 1、网盘搜...
  • 主要介绍了PHP记录搜索引擎蜘蛛访问网站足迹的方法,实例分析了针对php记录搜索引擎蜘蛛访问足迹的技巧,涉及数据库的创建及php记录各类常见搜索引擎访问的方法,需要的朋友可以参考下
  • 很多人不清楚啥是搜索引擎,或者把搜索引擎和浏览器混为一谈,虽然你每天都在用浏览器和搜索引擎,但你可能真的不知道浏览器与搜索引擎它俩到底是个啥关系 今天 我们就来揭秘浏览器与搜索引擎,此时此刻我也正使用着...
  • 搜索引擎使用必知必会技巧汇总 写在前面 我们在从互联网获取信息的时候,使用最频繁的莫过于搜索引擎;查Bug,找资源过程中很浪费时间,而学习一些搜索技巧可以大大提高我们的效率! 小Tip 注:以下方法在Google搜索...
  • 搜索引擎之链接原理

    万次阅读 2020-09-30 01:15:54
    搜索引擎之链接原理 文章目录 搜索引擎之链接原理 前言 一、李彦宏超链分析专利 二、HITS算法 三、TrustRank算法 四、Google PR 1. PR的概念和计算 2.PR的两个比喻模型 3.工具条PR 4.关于PR的几个误解 5.PR的意义 五...
  • 为了方便SEO,我们需要记录用户通过常见搜索引擎搜索关键词,下面是进入你网站的情况的相关实现代码,更多的,大家自己拓展咯
  •  雨爱搜索引擎采用自然界中常见的颜色绿色,绿色是植物的颜色,在中国文化中有生命的含义,也是春季的象征;绿色不仅仅是由树木、花草构成的风景,绿色还代表和平、宁静、自然、环保、生命、成长、生机、希望、青春...
  • 主要内容: 如何让搜索引擎收录网站 SEO的目的 站点自身内部的优化 影响排名的外部因素 常见的黑盒SEO手法 参考文章及网站
  • 搜索引擎是什么? 是指根据一定的策略,运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后为用户提供检索服务,将用户检索相关的信息展示给用户的系统。 搜索引擎的优化就是SEO优化。 搜索引擎...
  • 搜索引擎的优缺点比较

    千次阅读 2018-11-10 11:35:32
    关于搜索引擎,现在的基本上都是基于Apache的lucene原理进行开发的,流行的Elastic Search和solr,推荐几个写得很好的博客: lucene搜索引擎的原理 ... 各种搜索引擎的优缺点比较 ...
  • 常用搜索引擎使用技巧

    千次阅读 2018-04-03 07:53:33
    1 指定站内搜索 使用site指定在某网站内搜索 ...精确搜索 “CSDN” 3 模糊搜索 使用星号(*)代替一个单词进行模糊搜索 例如”a * saved is a * earned”会搜到如下结果:A penny saved is a penny earned ...
  • 浅谈国内十大搜索引擎

    千次阅读 2020-03-14 01:27:29
    这么多搜索引擎,但是用户只有这么多,真是“僧多粥少”啊,所以搜索引擎就使出浑身解数来黏住用户,最大程度地让用户产生对其搜索引擎的依赖性,如果说这些搜索引擎都是良性竞争的话,那么最后受益的还是用户,但是...
  • 常用搜索引擎介绍

    千次阅读 2020-02-18 11:27:55
    试试不一样的搜索引擎,不一样的结果!本文介绍常用的搜索引擎以及使用搜索的姿势. 百度 (Baidu) 世界上使用人数最多的中文搜索引擎; 更懂中文,更符合国人的使用习惯; 广告多,有竞价排名。 搜狗(Sogou) ...
  • 针对深度分页,ES提供了两种解决方案: 1)search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页...场景:网站搜索等这样的随机翻页搜索 after search: 优点:没有查询上限(单次查询的size不超
  • 搜索引擎原理与分类

    千次阅读 2020-04-22 19:03:45
    4.1 搜索引擎原理与分类 4.1.1 工作原理 4.1.2 工作特点 4.1.3 根据数据检索内容划分的搜索引擎类型 1.综合型 2.专题型 3.特殊型 4.1.4 根据数据类型划分的搜索引擎类型 1.全文索引 2.目录索引 3.元搜索...
  • 我已经在 J​​ava 中实现了一个用于二进制查询的搜索引擎(在链接列表中带有发布列表),而这些搜索引擎现在并不常见,所以我想我将专注于使用 TF-IDF 实现一个体面的全文搜索引擎来描述每个文档和查询。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 151,642
精华内容 60,656
关键字:

常见的搜索引擎如