搜索引擎 笔记

目录

  • 1. 搜索引擎 笔记
    • 1.1. Google 为什么成功
    • 1.2. 做搜索引擎, 既复杂, 又简单

1. 搜索引擎 笔记

1.1. Google 为什么成功

科技行业一直有个原则, 即人们不会愿意改变自己的使用习惯。Ramaswamy 在采访中坦言, “我们面临的最大障碍之一, 确实就是扭转用户的固有习惯。人们忘记了谷歌的成功不仅仅是开发出了更好的产品。为了实现目标, 我们必须做出一系列精准的分发决策。”

据报道, 谷歌每年向苹果支付高达 150 亿美元, 为的就是能在各类苹果设备的 Safari 浏览器中成为默认搜索引擎。谷歌同时也向 Mozilla 支付费用, 借此成为 Firefox 浏览器中的首选搜索引擎。而这笔费用高达每年 4.5 亿美元。谷歌还跟其他设备制造商和浏览器开发商有合作, 甚至跟电信运营商也有类似的交易。据《华尔街日报》报道, 三星曾在 2023 年短暂考虑结束与谷歌的交易, 但由于各种原因而最终放弃, 其中包括"可能对与谷歌间的广泛业务关系产生影响"。

谷歌的真正优势在于旗下的其它产品。Android 是目前全球最受欢迎的移动操作系统, 市场份额约占 78%。Chrome 则是最受欢迎的网络浏览器, 市场占比约 62%。在这两大平台上, 谷歌自然也成为不可撼动的默认搜索引擎。

1.2. 做搜索引擎, 既复杂, 又简单

搜索引擎是种神奇的事物——既复杂无比, 又简单纯粹。

实际上, 搜索引擎所做的就是编译网页数据库(即「搜索索引」), 之后在每次收到查询时浏览该数据库, 从中提取并交付质量最高、相关度最强的一组页面。但这过程中的每一步, 都涉及着巨大的复杂性, 需要做出一连串权衡。而权衡的核心有二: 时间与金钱。

即使创业者能建立一套不断更新的数据库, 囊括互联网上的数千亿个页面, 但光是它产生的存储和带宽成本就足以让地球上任何一家巨头企业破产。这还不包括每天对数据库执行无数次检索的成本。另外, 搜索响应中的每一毫秒都非常重要——谷歌会在结果上方显示每次查询耗费的时间。总而言之, 创业者恐怕没有足够的时间逐个查看整个数据库。

此外, 搜索引擎的构建还要从一个基本哲学问题开始: 什么叫高质量网页? 创业者必须决定哪些分歧是合理的, 而哪些信息属于纯粹的胡说八道, 必须搞清广告占比到多少才不会过度。那些由 AI 编写且充斥着 SEO 垃圾的网站当然不好, 但个人认真撰写、且同样充斥 SEO 垃圾的美食博客则还不错。

一旦完成了上述讨论并设定出明确的边界, 那搜索引擎中就基本确定了需要保留的几千个域名。其中包括 CNN 和 Breitbart 等新闻网站, Reddit、Stack Overflow 和 Twitter 的热门讨论板, 维基百科和 Craigslist 等工具服务, YouTube 和 Amazon 等服务平台, 还有各类最顶级的食谱/体育/购物网络。有时候, 创业者可以跟这些网站洽谈合作, 以结构化方式直接获取数据, 不再单独浏览各个页面。值得一提的是很多大平台都有专门的团队, 有时甚至愿意免费配合。

之后就该放出爬虫了。这些机器人能爬取给定网页上的内容, 之后查找并跟踪页面上的各个链接、索引全部页面内容, 就这样完成链接、索引的查找与跟踪循环。而每次爬虫访问一个页面时, 都会根据之前设定的高质量网页标准对其做评估。被认定为高质量的内容将被下载至某台服务器上, 于是搜索索引开始迅速膨胀。

当然, 爬虫也不是在哪里都受欢迎。爬虫每次打开网页, 都会给内容提供商带来带宽成本。现在想象一下, 一套搜索引擎每秒都会对网站上的各个页面进行加载和保存, 这样的更新成本将很快超出提供商的承受能力。

因此, 大多数网站都设置一个名为 robots.txt 的文件, 用于定义哪些爬虫可以访问其内容、哪些爬虫不行, 以及允许爬虫爬取哪些 URL。从技术上讲, 搜索引擎完全可以不理会 robots.txt 上的规则, 但这是 Web 结构和文化中的一部分。几乎所有网站都愿意接纳谷歌和 Bing, 因为它们带来的可发现性已经超过了带宽成本。也有很多人会阻止特定的服务商, 例如不希望亚马逊爬取并分析他们的购物网站。其他人则制定一揽子规则: 除了谷歌和 Bing 外, 其余爬虫概不接待。

很快, 爬虫就会带回相当广泛的互联网快照。接下来的工作就是针对搜索引擎可能收到的每条查询, 按顺序对全部页面做排名。大家可以按主题对页面做排序, 这样就能划分成更小、更易于搜索的索引, 而不是包罗万象的庞然大物。简单来讲, 就是本地结果与本地结果匹配, 购物与购物匹配, 新闻与新闻匹配。我们需要使用大量机器学习技术来收集特定页面的主题和内容, 同时也离不开人工协助。

此外, 还会引入评分团队, 向他们展示查询和结果, 并要求他们从 0 到 10 为结果的真实性打分。有时候问题很明显, 如果有人搜索「Facebook」, 但响应结果的第一条居然不是 facebook.com, 那肯定不能接受。但大多数情况下, 我们会合并来自大量输入的评分, 并将其馈送到索引和主题模型当中, 之后不断重复这个过程。

到这里, 问题才刚刚解决了一半。我们还得提高所谓"查询理解"能力, 也就是意识到搜索"巨石强森"和搜索"道恩·约翰逊"的人其实是想找同样的信息。最终, 我们将积累起一个庞大的同义词和相似性库, 并据此重写查询以降低搜索难度。而且如谷歌所说, 每天他们的引擎中都有 15%的全新搜索, 所以这场理解人们真实需求和扩充新知识的赛跑将永远没有终点。

一段时间之后, 搜索引擎正式上线了, 开始获得更多人的关注、点击和偏好。这里还有一项黄金标准: 如果用户在点击链接后, 不再立即搜索和点击其他链接, 就代表当前结果的质量令人满意。而另一方面, 用户们的点击量越大, 就越能了解他们真正想要的是什么。

此外, 运行搜索引擎还需要不断在速度、成本和质量三者中取得平衡。比如, 当有人输入"YouTube"并按下回车时, 如果搜索整个数据库会耗费太长时间、造成不必要的带宽和存储成本; 如果保留一个容纳整个互联网的数据库, 不但存储成本高昂, 搜索速度也会太过缓慢; 如果设定只显示网络上最受欢迎的 100 个网站, 就能保证速度和成本, 但会存在内容不全面、质量不可靠的情况。同时, 各个网站本身也在不断变化, 搜索引擎的爬虫和排名系统也要持续跟进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 2 Mixin 混入

混入&#xff08;Mixins&#xff09;是一种在Vue组件中重用代码的方式。它允许你定义一些可复用的选项对象&#xff0c;然后将这些选项合并到不同的组件中。混入可以用于在多个组件之间共享逻辑、方法、生命周期钩子等。 示例&#xff1a; <!DOCTYPE html> <html>…

【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

目录 EFK安装部署 一、环境准备&#xff08;所有主机&#xff09; 1、主机初始化配置 2、配置主机名并绑定hosts&#xff0c;不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、配置阿里云yum源 3、安装kubelet kubeadm …

模型数据处理-数据放入 session和@ModelAttribute 实现 prepare 方法详细讲解

&#x1f600;前言 本文详细讲解了模型数据处理-数据放入 session和ModelAttribute 实现 prepare 方法详细讲解 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c…

LeetCode //C - 56. Merge Intervals

56. Merge Intervals Given an array of intervals where intervals[i] [ s t a r t i , e n d i ] [start_i, end_i] [starti​,endi​], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the in…

企业数字化转型大数据湖一体化平台项目建设方案PPT

导读&#xff1a;原文《企业数字化转型大数据湖一体化平台项目建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以点赞评论转发…

知识体系总结(九)设计原则、设计模式、分布式、高性能、高可用

文章目录 架构设计为什么要进行技术框架的设计 六大设计原则一、单一职责原则二、开闭原则三、依赖倒置原则四、接口分离原则五、迪米特法则&#xff08;又称最小知道原则&#xff09;六、里氏替换原则案例诠释 常见设计模式构造型单例模式工厂模式简单工厂工厂方法 生成器模式…

【精通性能优化:解锁JMH微基准测试】一基本用法

文章目录 1. 什么是JMH1.1 用JMH进行微基准测试1. JmhExample01.java2. 程序输出JmhExample01.java 2.2 JMH的基本用法2.1 Benchmark标记基准测试方法2.2 Warmup以及Measurement1. 设置全局的Warmup和Measurement&#xff08;一&#xff09;2. 设置全局的Warmup和Measurement&a…

设计模式篇---抽象工厂(包含优化)

文章目录 概念结构实例优化 概念 抽象工厂&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 工厂方法是有一个类型的产品&#xff0c;也就是只有一个产品的抽象类或接口&#xff0c;而抽象工厂相对于工厂方法来说&#xff0c;是有…

Android Studio实现解析HTML获取图片URL,将URL存到list,进行列表展示

目录 效果build.gradle(app)添加的依赖(用不上的可以不加)AndroidManifest.xml错误代码activity_main.xmlitem_image.xmlMainActivityImage适配器ImageModel 接收图片URL效果 build.gradle(app)添加的依赖(用不上的可以不加) dependencies {implementation com.square…

Python可视化在量化交易中的应用(11)_Seaborn折线图

举个栗子&#xff0c;用seaborn绘制折线图。 Seaborn中折线图的绘制方法 在seaborn中&#xff0c;我们一般使用sns作为seaborn模块的别名&#xff0c;因此&#xff0c;在下文中&#xff0c;均以sns指代seaborn模块。 seaborn中绘制折线图使用的是sns.lineplot()函数&#xff…

springboot+grpc+k8s+istio环境

2023年8月17日&#xff0c;本人之前使用过nacosdubbospringboot、eurekafeign等环境。最近学习到了istio服务网格集成到k8s也可以实现分布式微服务。 1. 环境 Kubernetes集群istio集成到k8sjdk17 (8也ok)gPRC服务间通信 2. 微服务 cloud-config服务是spring-cloud-config-s…

中国剩余定理及扩展

目录 中国剩余定理解释 中国剩余定理扩展——求解模数不互质情况下的线性方程组&#xff1a; 代码实现&#xff1a; 互质&#xff1a; 非互质&#xff1a; 中国剩余定理解释 在《孙子算经》中有这样一个问题&#xff1a;“今有物不知其数&#xff0c;三三数之剩二&#x…

【C++】做一个飞机空战小游戏(十)——子弹击落炮弹、炮弹与飞机相撞

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

leetcode做题笔记88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组…

Mybatis的SqlSource SqlNode BoundSql

学习链接 MyBatis SqlSource解析 【Mybatis】Mybatis源码之SqlSource#getBoundSql获取预编译SQL Mybatis中SqlSource解析流程详解 Mybatis TypeHandler解析 图解 Mybatis的SqlSource&SqlNode - processon DynamicSqlSource public class DynamicSqlSource implement…

notepad++ verilog关键字自动补全

新建verilog.xml放在安装目录下 D:\Program Files (x86)\Notepad\autoCompletion <?xml version"1.0" encoding"Windows-1252" ?> <NotepadPlus><AutoComplete><KeyWord name"accept_on" /><KeyWord name"a…

mysql自定义实体类框架

根据表结构自动生产实体类和方法,根据反射与io生成,可自定义扩展方法 package com.digital.web.front; /*** pom依赖* <dependency>* <groupId>mysql</groupId>* <artifactId>mysql-connector-java</artifactId>* <version>5.1.27</ve…

设计模式详解-责任链模式

类型&#xff1a;行为型模式 实现原理&#xff1a;为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦&#xff0c;每个接收者都包含对另一个接收者的引用&#xff0c;如果一个对象不能处理该请求&#xff0c;那么它会把相同的请求传给下一个接收者&#xff0c;…

极致鸿蒙2.0——华为MatePad系列安装AidLux,一个自带vscode的Python编译环境

看着刚刚人入手的华为鸿蒙系统MatePad11平板&#xff0c;是如此的美轮美奂&#xff0c;但是总感觉少了点什么&#xff0c;少了点什么呢&#xff1f;是编程环境&#xff0c;我爱MatePad&#xff0c;也爱编程&#xff0c;那如果可以在MatePad上编程&#xff0c;会发生什么&#x…

SpringBoot、Java 使用 Jsoup 解析 HTML 页面

使用 Jsoup 解析 HTML 页面 什么是 Jsoup&#xff1f; Jsoup 是一个用于处理 HTML 页面的 Java 库&#xff0c;它提供了简单的 API&#xff0c;使得从 HTML 中提取数据变得非常容易。无论是获取特定标签的内容还是遍历整个页面的元素&#xff0c;Jsoup 都能轻松胜任。 如何使…