搜索引擎是如何理解你的查询并提供精准结果的?

摘要:你有没有想过,每次输入“今天天气怎么样”或“买一杯咖啡多少钱”时,屏幕后面的搜索引擎到底经历了什么?是小小的搜索框承载了宇宙般的知识,还是藏着一群高速运转、永不下班的“搜索精灵”?答案可能没有那么魔幻,但它们确实有自己的“工作流程”:爬遍互联网、储存信息、智能

你有没有想过,每次输入“今天天气怎么样”或“买一杯咖啡多少钱”时,屏幕后面的搜索引擎到底经历了什么?是小小的搜索框承载了宇宙般的知识,还是藏着一群高速运转、永不下班的“搜索精灵”?答案可能没有那么魔幻,但它们确实有自己的“工作流程”:爬遍互联网、储存信息、智能检索、纠正我们频繁的错字,一步步只为确保你能在几毫秒内得到准确的答案。

本篇文章带你揭开搜索引擎的秘密:你将了解“爬虫”是如何抓遍全网的,索引系统如何给信息打上标签,甚至学到搜索引擎如何猜测你的错字并帮你改成“正常”的词——总之,搜索引擎的每一环节都在默默帮助你看懂、找到并最终点击你需要的信息。所以,下一次不妨多给搜索引擎打个五星好评!

一、搜索引擎简单介绍

搜索引擎是一种强大的工具,帮助你快速找到互联网上的信息。它通过使用复杂的算法,迅速检索成千上万甚至数十亿的网页,并将与你的搜索查询相关的结果呈现给你。搜索引擎背后涉及多种关键技术,它们协同工作以实现高效的信息检索和呈现。以下是一些主要的搜索引擎技术:

这些技术共同推动搜索引擎的高效性和精确性,使其成为人们获取信息的重要工具。不断的技术创新和改进有助于提供更好的搜索体验。

二、搜索引擎整体架构和工作过程

(一)整体分析

搜索引擎通常由三个核心组件构成:爬虫系统、索引系统和检索系统。这些组件协同工作,使搜索引擎能够从互联网上检索、索引和呈现相关的信息。

爬虫系统:爬虫系统负责从互联网上抓取网页内容。它使用网络爬虫程序,遵循链接、下载网页,然后将抓取到的数据传递给索引系统。爬虫系统需要处理重复、过滤非关键信息、控制爬取速度等任务。

索引系统:索引系统将抓取到的信息组织成可检索的数据结构。这包括文本分析、标记化(拆分成词汇)、关键词提取和构建倒排索引。倒排索引将关键词映射到包含它们的文档,以加速后续检索。

检索系统:检索系统是搜索引擎的前端,用户通过它提交搜索查询。这个系统使用检索模型和算法来分析用户的查询,从索引系统中检索相关的文档,然后将结果排序并呈现给用户。

基本工作过程可简单理解如下:

用户输入查询:用户在搜索引擎的搜索框中输入关键词或查询。

查询分析:检索系统分析用户的查询,可能包括自然语言处理和语法分析。

检索相关文档:检索系统使用索引系统中的倒排索引,快速找到与查询相关的文档。

结果排序:搜索引擎使用复杂的算法,考虑文档的相关性、权重、链接分析等因素来排名搜索结果。

呈现结果:最相关的搜索结果呈现给用户,通常以列表形式,其中包含链接、标题和简短描述

用户交互:用户浏览搜索结果,点击链接以访问相关网页。

这是搜索引擎的简化工作过程,实际上涉及更多的细节和技术,如数据清洗、反作弊、推荐系统等,以确保高效的搜索体验。搜索引擎的性能和准确性取决于其整体架构和工作流程的优化。

(二)爬虫系统

爬虫系统是搜索引擎的关键组成部分,负责从互联网上抓取网页内容,为搜索引擎提供数据。

三个基本点

爬虫系统的重要性主要基本需满足以下三个基本点:

数据源: 爬虫系统是搜索引擎的数据源之一。它通过抓取网页内容,使搜索引擎能够索引和呈现大量的信息,包括文本、图片、视频等。

新鲜内容: 搜索引擎需要定期更新搜索结果,以反映互联网上不断变化的内容。爬虫系统的定期抓取确保搜索引擎提供最新的信息。

全面性: 通过广泛抓取网页,爬虫系统帮助确保搜索引擎具有全面性,能够覆盖多种主题和领域。

爬虫系统的工作流程

种子URL生成: 爬虫系统从一组起始URL(种子URL)开始。这些URL可以是搜索引擎的主页、热门网站或其他来源。

URL队列: 爬虫程序将种子URL放入URL队列,然后逐一处理队列中的URL。它将URL下载并抓取页面内容。

页面下载: 爬虫程序根据URL请求网页内容。这可能包括HTML、CSS、JavaScript、图像、视频等。

数据处理: 抓取到的页面需要进行数据处理,包括解析HTML、提取文本内容和其他媒体文件。

链接跟踪: 爬虫系统从抓取到的页面中提取新的链接,将它们加入URL队列以进一步抓取。这是爬虫系统持续获取新信息的关键步骤。

数据存储: 爬虫系统将抓取到的数据存储在数据存储平台中,通常是分布式数据库,如HBase。

定期更新: 爬虫系统会定期重新访问已抓取的页面,以捕获新信息和更新内容。

关键考虑因素和挑战

爬取策略: 爬虫系统需要制定策略来选择哪些页面抓取,以及抓取频率等。这涉及到爬虫的深度和广度。

避免重复和循环链接: 防止爬虫陷入重复抓取或循环链接的问题是一个挑战。需要实施适当的机制来处理这些情况。

限制访问频率: 爬虫系统需要遵循网站的访问规则,以防止对目标网站造成过大的负载。

数据清洗和去重: 抓取到的数据可能包含垃圾信息,需要进行数据清洗和去重,以提高数据质量。

爬虫性能: 爬虫系统需要高性能,能够有效地处理大量页面,并在短时间内完成抓取。

伦理和法律问题: 爬虫系统需要遵守伦理和法律规定,尊重网站的隐私政策和使用条款。

反作弊和防止滥用: 爬虫系统需要实施反作弊措施,以防止恶意爬虫滥用网站资源。

总的来说,爬虫系统在搜索引擎中扮演着关键的角色,确保搜索引擎具有丰富、及时、全面的数据源,以满足用户的信息检索需求。它需要高效、智能和可持续地从互联网上获取内容,并处理各种挑战和复杂性。

(三)索引系统

网页处理阶段

其前置前提需要对抓取的网页进行处理,确保生成可用的索引和提供高质量的搜索结果。一般包括两个阶段,以下是这两个阶段的详细说明:

预处理阶段

相似网页去重(Duplicate Detection): 抓取的网页中可能包含相似或几乎相同的内容,这种重复的网页会占用存储空间和降低检索效率。去重步骤通过计算哈希值、特征向量或其他技术来确定哪些网页是相似的,然后只保留一个副本,从而降低数据冗余。

网页质量分析(Quality Analysis): 这一步骤旨在评估抓取的网页的质量。这包括检查页面的权威性、内容的实用性、可读性和可信度。高质量的网页通常会更有可能被纳入索引,而低质量或垃圾内容则被过滤掉。

分词处理(Tokenization): 分词是将网页文本拆分为单词或短语的过程,以便进行后续的检索。分词处理使用自然语言处理技术,可以将文本拆分为可检索的单元,如单词、词干或短语。

反作弊分析阶段

反作弊分析(Anti-Spam Analysis): 这个阶段旨在检测和防止作弊网页对搜索结果的干扰。反作弊技术包括检测关键词滥用、隐藏文本、链接操纵、门户网页(Doorway Pages)等作弊行为。搜索引擎会使用各种算法和规则来识别和过滤作弊网页。

链接分析(Link Analysis): 链接分析有助于识别网页之间的链接关系,以确定网页的权威性和重要性。搜索引擎可以使用链接分析来识别和排除低质量的链接,以改善搜索结果的质量。

内容分析(Content Analysis): 内容分析涉及对网页文本和多媒体内容的进一步检查,以确保内容的质量和合规性。这有助于识别不良内容、违规内容或侵权内容。

这些处理步骤确保搜索引擎能够管理和索引大规模的网页数据,提供高质量和准确的搜索结果。同时,反作弊分析有助于维护搜索结果的品质,减少对搜索结果的操纵和滥用。综合这两个阶段,搜索引擎可以提供更具价值和可靠性的搜索体验。

索引生成阶段

处理好网页之后,就要为搜索引擎生成索引,索引的生成过程主要可以分为三步:索引拆分、索引构建、索引更新,从而确保搜索引擎能够高效地提供检索服务,并实时更新数据。

索引拆分

高质量和普通质量的网页集合: 由于抓取的网页数量巨大,将它们全部生成索引可能会导致性能问题。因此,在离线阶段,网页根据质量进行分组,划分为高质量和普通质量的网页集合。这种分层策略有助于提高搜索结果的质量和效率。

基于文档的拆分: 即使在高质量和普通质量的网页集合中,数据量仍然很大。为了更好地管理索引数据,这些集合进一步被分割成较小的文档或块。每个文档或块包含一组网页,这有助于分布式处理和存储索引数据。

索引构建

索引分片机制: 确定了索引分片的机制,以便将索引数据划分为多个独立的分片。这有助于实现分布式处理和查询。

MapReduce服务: 使用MapReduce或类似的分布式计算框架,为每个索引分片生成相应的任务。这些任务负责计算和构建倒排索引文件,其中包含了关键词、文档ID等信息,以便更快速地进行检索。

倒排索引文件: 每个倒排索引文件代表一个索引分片,可以加载到线上的服务器中以提供检索服务。这些文件通常采用高效的数据结构,以支持快速检索。

索引更新

全量索引和增量索引: 搜索引擎需要保持数据的实时性,因此使用全量索引结合增量索引的机制。全量索引包含整个索引的数据,而增量索引仅包含自上次更新以来发生变化的部分。

滚动合并法: 为了管理巨大的全量索引数据,滚动合并法是一个常见的策略。它允许在增量索引与全量索引之间执行滚动合并,以确保数据的持续更新。

这个索引生成过程确保了搜索引擎能够有效地处理大规模的网页数据,提供高效的检索服务,并及时更新数据以反映互联网上不断变化的内容。这些技术和策略在搜索引擎的运行中起到至关重要的作用。

四)检索系统

检索系统的效率和准确性对搜索引擎的用户体验至关重要。它需要使用先进的自然语言处理和机器学习技术,以确保用户的查询得到最相关和高质量的搜索结果。同时,查询分析、拼写纠正和相关查询推荐等功能也有助于提高搜索的准确性和用户满意度。

查询分析

用户查询分析: 检索系统首先分析用户的查询词和行为特征,以了解用户的真实查询意图。这可以涉及自然语言处理和语义分析,帮助搜索引擎更好地理解用户的需求。

拼写纠正和相关查询推荐: 如果用户查询词存在拼写错误或者没有足够的结果,搜索引擎可能会自动进行拼写纠正或建议相关查询,以改进查询的准确性和扩展搜索范围。

检索服务

查询转发: 根据用户的查询,搜索引擎将查询转发到相应的索引分片。这是一个分布式查询处理的关键步骤。

倒排索引检索: 索引分片使用倒排索引的检索机制来查找包含查询词的文档。这是高效的检索方法,倒排索引允许快速定位包含查询词的文档。

结果返回: 每个索引分片返回其结果,这些结果通常包括文档ID、得分和其他相关信息。

结果排序和质量分析

相关性分析: 检索系统使用复杂的算法和机器学习模型来评估每个文档与用户查询的相关性。这涉及考虑关键词匹配、文档权重、链接分析等多种因素。

结果打分: 检索系统为每个文档打分,并根据得分对搜索结果进行排序。高得分的文档排名更靠前,以提供用户最相关的结果。

Top K 结果选取: 搜索引擎通常选择前K个最相关的结果,这个K通常是用户界面上显示的结果数量。这些结果将呈现给用户。

三、搜索引擎是如何进行查询分析的?

查询分析在搜索引擎中是至关重要的,因为它决定了搜索引擎是否能够准确理解用户的查询意图。在查询分析的过程中,对搜索词进行分词粒度分析、词的属性分析和用户需求分析是关键的工作,这有助于搜索引擎更好地理解用户的查询意图。

(一)分词粒度分析

分词(Tokenization): 将用户输入的查询文本拆分成单词、短语或标记,这些单元成为搜索的基本单位。分词可以使用自然语言处理技术,以便搜索引擎理解用户的查询。

分词粒度: 分词可以在不同粒度上进行,包括细粒度(如将句子拆分成单词)、粗粒度(如将句子拆分成短语或主题)等。选择适当的分词粒度对于捕捉用户查询意图至关重要。

(二)词的属性分析

词性标注(Part-of-Speech Tagging): 词性标注分析每个单词的语法属性,如名词、动词、形容词等。这有助于理解查询中每个词的作用和含义。

命名实体识别(Named Entity Recognition,NER): NER分析可以识别查询中的命名实体,如人名、地名、组织名等。这有助于推断用户的查询意图,特别是在地理或文档检索方面。

词义消歧(Word Sense Disambiguation): 当查询词具有多个可能的含义时,词义消歧帮助搜索引擎确定哪个含义是最相关的。

(三)用户需求分析

语义分析(Semantic Analysis): 用户的查询可能具有复杂的语义结构,搜索引擎需要理解查询的上下文和语义关系,以更好地理解用户的需求。

查询意图分析(Query Intent Analysis): 搜索引擎努力确定用户的查询意图,即用户想要找到什么类型的信息。这可能包括信息查询、购物、导航等不同意图。

上下文分析: 用户的上下文信息,如搜索历史、地理位置、设备类型等,可以影响查询的解释和结果。

时效性分析:当用户进行查询分析时,时效性分析可以是一个重要的考虑因素,特别是对于某些类型的查询。时效性分析涉及确定用户是否寻求与当前事件、新闻或趋势相关的信息。它有助于搜索引擎提供最新的和最相关的结果。

这些分析工作有助于搜索引擎更准确地匹配用户的查询与相关文档,并提供最相关的搜索结果。它们涉及自然语言处理、语义分析和机器学习技术,以确保搜索引擎能够理解和满足用户的搜索需求。

四、搜索引擎是如何进行查询纠错的?

查询纠错是搜索引擎的重要功能,它有助于改善用户的搜索体验,尤其是在用户输入存在拼写错误或输入错误的情况下。

查询纠错的一般步骤:

1. 错误判断: 在这一步,搜索引擎会检测用户查询中的潜在拼写错误或输入错误。错误判断可以使用多种方法,包括基于词典的拼写检查、编辑距离算法(如Levenshtein距离)、语言模型和统计信息。

2. 候选召回: 一旦错误被检测到,搜索引擎会生成可能的纠错候选词。这些候选词是可能替代用户原始查询的词汇,通常与原查询有一定的语义相似性。

3. 打分排序: 在这一步,搜索引擎会为每个候选词分配一个得分,以确定哪一个是最合适的纠错建议。得分通常基于候选词与原查询的相似性、词频信息、上下文信息以及其他相关因素。搜索引擎会选择得分最高的候选词作为查询的纠正版本。

搜索引擎在进行查询纠错时通常会综合使用多种技术和数据源来判断用户查询中的拼写错误。比如:

常用字典: 常用字典包括标准的拼写词典,用于验证用户输入的单词是否存在于正常的拼写字典中。如果查询中的词汇不在字典中,搜索引擎可能会认为它是潜在的拼写错误

混淆字典: 混淆字典含一组常常容易混淆的词对。例如,在中文中,诸如“了”和“的”之类的字词容易被混淆。搜索引擎可以使用混淆字典来检测并纠正这些混淆。

语言模型: 语言模型是基于大量文本数据训练的模型,用于预测一个单词或短语在给定上下文中是否合理。如果用户的查询包含一个在给定上下文中不太合理的单词,语言模型可以帮助搜索引擎检测并标记它。

机器学习模型: 机器学习模型可以训练以识别拼写错误。这些模型可以使用历史数据来学习常见的拼写错误模式,然后在用户查询中应用这些模式来检测潜在的错误。

综合使用这些方法,搜索引擎可以更精确地判断用户查询中的拼写错误,并提供相应的纠错建议。这有助于改善搜索结果的质量和用户体验,特别是在用户输入错误时。

我们以一个案例来说明如何综合使用不同的技术和数据源来判断和纠正拼写错误。假设用户在搜索引擎中输入了以下查询:“即可时间”。

错误判断和纠正的步骤:

常用字典: 首先,搜索引擎会检查查询中的每个单词是否出现在常用拼写字典中。在这种情况,它可能会发现“即可时间”中的“即可”不在常用字典中。

混淆字典: 进一步分析可能的混淆。搜索引擎可能会考虑混淆字典,其中包含了一些常见的混淆词对,如“级”和“极”。这可能会引起搜索引擎的警示,因为“即可”和“极”是一个常见的混淆。

语言模型: 搜索引擎还可以使用语言模型来分析整个查询的上下文。如果整个查询中存在语法错误或不合理的词汇,语言模型可以检测到这些问题。在这种情况下,语言模型可能会发现“即可时间”在给定上下文中不太合理。

机器学习模型: 机器学习模型可以使用历史数据来学习常见的拼写错误。如果“即可时间”是一个经常发生的错误,机器学习模型可能会标记它并建议纠正。

综合考虑这些因素后,搜索引擎可能会得出以下结论:

查询“即可时间”可能包含拼写错误。

潜在的纠正建议是将“即可”改正为“极”,因为它们具有相似的音韵和拼写,而且在给定上下文中更合理。

搜索引擎将向用户提供纠正后的查询,即将“即可时间”纠正为“极可时间”,以改善搜索结果的准确性。展示了如何通过综合使用多种技术和数据源来判断和纠正拼写错误,从而提高用户的搜索体验。

(二)候选召回

在查询纠错的候选召回阶段,搜索引擎可以采用不同的方法来生成可能的纠错候选词。以下是一些常见的候选召回方法:

同音纠错召回: 同音纠错是一种基于音韵相似性的纠错方法。它考虑到拼写错误可能导致与原查询有相似发音的词汇。例如,对于查询“即可时间”,同音纠错可能会生成候选纠错词“极可时间”,因为它们在发音上相似。

同型纠错召回: 同型纠错是一种基于字母形状相似性的纠错方法。它考虑到用户可能会将字母形状相似的字符误认为是相同的。例如,对于查询“teh”,同型纠错可能会生成候选纠错词“the”,因为它们具有相同的字母形状。

编辑距离召回: 编辑距离是一种计算两个词之间的编辑操作(插入、删除、替换)的距离的方法。在编辑距离召回中,搜索引擎可以生成编辑距离内的词作为候选纠错词。例如,对于查询“fligt”,编辑距离召回可能会生成候选纠错词“flight”。

机器学习召回: 机器学习模型可以使用历史数据来学习常见的拼写错误和纠正模式。在机器学习召回中,模型可以生成可能的纠错建议,考虑到用户查询和历史纠错数据。这种方法可以更加灵活和智能地生成候选纠错词。

这些方法可以单独使用或结合在一起,以生成候选纠错词。搜索引擎通常会使用多个方法,以确保覆盖不同类型的拼写错误和提供多样化的纠正建议。最终,这些候选纠错词将被进一步评估和排序,以确定最佳的纠错建议。

让我们通过一个具体案例来说明不同候选召回方法在查询纠错中的应用。用户在搜索引擎中输入了拼写错误的查询:“teh story of a cat.”

候选召回方法的应用:

同音纠错召回: 搜索引擎可能会使用同音纠错方法,识别到“teh”与正确的“the”在发音上相似。因此,它会生成一个同音候选:“the story of a cat。”

同型纠错召回: 同型纠错方法会考虑字母形状相似性。在这种情况下,搜索引擎可能会生成候选:“the story of a cat.”,因为它们具有相似的字母形状。

编辑距离召回: 搜索引擎可以使用编辑距离方法计算“teh”与“the”的编辑距离。编辑距离召回可能会生成“the”作为候选纠错,因为只需一次编辑操作(替换)即可将“teh”纠正为“the”。

机器学习召回: 机器学习模型可以基于历史数据和上下文信息学习纠错模式。在这种情况下,机器学习模型可能会生成“the story of a cat.”作为候选纠错,因为它在上下文中更符合语法。

综合候选召回: 在实际情况下,搜索引擎通常会综合使用多种方法,生成一组候选纠错词。这些候选纠错词将在后续步骤中被评估和排序,以确定最佳的纠错建议。在这个案例中,可能会产生多个候选,但最终“the story of a cat.”可能会被选为最佳纠正建议,因为它在语法上和上下文中都更合理。

(三)打分排序

在查询纠错的打分排序阶段,搜索引擎可以使用不同的机器学习算法来为候选纠错建议打分,以确定最佳的纠正建议。以下是一些常见的机器学习算法,它们可以用于打分排序:

支持向量机 (SVM): 支持向量机是一种监督学习算法,可用于分类和回归任务。在查询纠错中,SVM可以用于分类不同的纠错建议,以确定哪个建议最有可能是用户的意图。它可以考虑多个特征和上下文信息,以为候选建议分配得分。

梯度提升树 (Gradient Boosting Trees): 梯度提升树是一种集成学习算法,通过组合多个决策树模型来提高性能。在查询纠错中,梯度提升树可以用于生成每个候选纠错建议的得分,考虑各种特征和上下文信息。

逻辑回归 (Logistic Regression): 逻辑回归是一种统计模型,用于解决二元分类问题。在查询纠错中,逻辑回归可以用于为每个候选纠错建议分配概率分数,以确定哪个建议最有可能是正确的。

深度学习 (Deep Learning): 深度学习模型,如神经网络,可以用于查询纠错的得分排序。它们可以处理复杂的特征和上下文信息,并通过训练自适应模型来生成最佳的纠正建议。

这些算法可以根据问题的复杂性和可用的数据来选择。通常,搜索引擎会使用历史数据和训练集来训练这些模型,以便更准确地为候选纠错建议分配得分。最终,得分最高的候选建议将被选为最佳的纠正建议,以提供用户更准确的搜索结果。

让我们通过一个具体案例来说明如何使用不同的机器学习算法进行查询纠错的打分排序。我们将使用四种不同的机器学习算法:支持向量机(SVM)、梯度提升树、逻辑回归和深度学习来为纠错候选建议打分,以确定最佳的纠正建议。如用户在搜索引擎中输入了拼写错误的查询:“aple.”

支持向量机 (SVM): SVM可以用于为不同的纠错建议打分。在这种情况下,SVM可以考虑多个特征,如编辑距离、同音相似性和上下文信息,来为每个候选纠错建议分配得分。例如,SVM可能会得出以下得分:

候选建议1: 0.85

候选建议2: 0.72

候选建议3: 0.68

梯度提升树: 梯度提升树可以组合多个决策树模型来为候选建议打分。它可以考虑编辑距离、字母形状相似性和上下文信息。例如,梯度提升树可能会得出以下得分:

候选建议1: 0.89

候选建议2: 0.76

候选建议3: 0.71

逻辑回归: 逻辑回归可以用于为候选建议分配概率分数。它可以考虑不同特征的权重,如编辑距离和同音相似性。例如,逻辑回归可能会得出以下得分:

候选建议1: 0.91

候选建议2: 0.78

候选建议3: 0.68

深度学习 (神经网络): 深度学习模型可以处理复杂的特征和上下文信息。它们可以通过训练自适应模型来生成最佳的纠正建议。例如,深度学习模型可能会得出以下得分:

候选建议1: 0.93

候选建议2: 0.80

候选建议3: 0.72

综合考虑这些得分后,搜索引擎可以确定最高得分的候选建议,例如“apple”,作为最佳的纠正建议。这个建议将被呈现给用户,从而提供更准确的搜索结果和更好的用户体验。不同机器学习算法的选择和特征工程可能因搜索引擎的具体实现而有所不同。

五、总结

通过本文的探索,我们深入了解了搜索引擎从“捕捉”信息到“呈现”信息的一系列过程。搜索引擎作为现代信息检索的核心工具,依赖爬虫系统、索引系统和检索系统的协同工作,将海量的互联网信息快速、高效地呈现给用户。爬虫系统负责抓取网页,索引系统整理数据、建立索引,检索系统则解析用户的查询、分析并展示最相关的内容。

此外,我们还详细探讨了搜索引擎如何理解用户需求,包括查询分析、拼写纠错等多个方面。每一项功能的背后都依赖于复杂的算法和技术支持,从词汇匹配到语义理解,搜索引擎通过一系列精准的分析步骤,为用户提供更相关、更准确的结果。

总之,搜索引擎不仅仅是一个工具,更是一个多功能的信息助理。它不断适应、创新,以便更好地服务于日益复杂的信息需求。在未来,搜索引擎的技术仍将持续演进,为我们的生活带来更多便捷和智慧。

自己动手写网络爬虫(配光盘)(深入理解搜索引擎 网络爬虫开发宝典¥4.6京东购买

来源:牛人科技说

相关推荐