V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
annoy1309
V2EX  ›  问与答

想问几个关于搜索引擎原理的问题

  •  
  •   annoy1309 · 2019-01-24 09:46:05 +08:00 via Android · 1352 次点击
    这是一个创建于 1912 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大概搜索引擎的原理都了解过,自己也写过小型化的玩具搜索。

    有几个问题一直没法了解,搜索也不知道关键词 /搜不到结果,还请大家赐教(暂时拿百度举例子)

    ①关于新词搜索,热门词会提前做缓存结果我了解,但是比如一个很少有人搜的词汇,百度难道是在请求时遍历自己的整个抓取库吗?比如我现在搜索一个『 JEHWUWB 』这是一个从来没有出现过的乱码词汇,难道会在请求时对整个百度的抓取库进行搜索吗?感觉百度抓取的数据应该量也不小于 1T 吧,怎么响应大量的新词搜索呢?

    ②关于蜘蛛抓取量,百度之类是会抓历史页面的,比如一个网页 1 天更新一次,对于百度搜索引擎内部的数据库存,会每一次抓取都会留档吗?这样的话,是不是要远大于源站原页面(几十倍)的空间来储存呢?

    ③关于权重,每个搜索结果都有数万个站点,对于不同结果不同的站点权重还是不一样的(比如搜血管的时候,医学网站的权重肯定要比新浪高,搜其他的时候可能反过来)这种权重表对于新词搜索的时候,是重新维护一次吗?如何去确认一个新词的时候,下面结果列表的排序呢

    7 条回复    2019-01-24 16:07:16 +08:00
    jetyang
        1
    jetyang  
       2019-01-24 10:31:15 +08:00   ❤️ 1
    1. 搜索引擎里网站是有等级的,不同页面也是分级的,类似 pagerank,网页会按优先级分进高优先级库和全集库(剩下的网页),高优先级库通常占比非常小,一个 query 发过去,先在高优先级网页库里检索,如果结果不够再去全集里补全。
    2. 应该是要存储的,压缩。
    3. 不管什么 query,先按步骤 1 拿出初步结果,取前 n 个( n 在 1000 左右),在这 n 个里做 rerank,这时可以考虑如你说的 query 和 每个网页的关系,还可以考虑用户以往的搜索历史和点击记录,这时的结果集很小,可以做一些精细化性能消耗大的排序工作。
    网页搜索是一个非常复杂的系统工程,要考虑的东西还有很多。。。

    声明:本人从未在百度、搜狗、360、搜搜工作过
    annoy1309
        2
    annoy1309  
    OP
       2019-01-24 10:48:51 +08:00 via Android
    @jetyang 比如像我刚刚的那个自建词汇,绝大多数可能在高优先库内是没有的,那如何在可接受响应时间内做一个全量搜索呢?
    在我对谷歌的测试中,能够搜到和我测试乱码词汇完全匹配的网页结果,延时也几乎没有区别,那是怎么做到在那么短的时间内对全量库进行检索呢?而且同时有大量请求。我觉得也不经济呢。
    annoy1309
        3
    annoy1309  
    OP
       2019-01-24 10:50:53 +08:00 via Android
    拿最理想化来说,全量库 100G+,就算全在内存中,搜索需要的 cpu 时间数我觉得也是不经济的🐸我不知道我哪里的判断出了问题
    jetyang
        4
    jetyang  
       2019-01-24 11:37:02 +08:00
    @annoy1309 倒排索引里,每个 term 都对应着 docid 链表,term 的查询是用 hash 的,不管冷门词还是热门词查询都是 O(1) 的,如果那个词非常生僻,它对应的 docid 链表是很短的,返回很快不是很正常吗?

    反而,如果 query 分拆出多个热门 term,对多个长 docid 链表做交集、并集耗时会更长
    yuikns
        5
    yuikns  
       2019-01-24 11:41:02 +08:00
    楼主是不是不太了解倒排索引啊

    https://blog.argcv.com/articles/3008.c
    Cheez
        6
    Cheez  
       2019-01-24 13:17:47 +08:00
    我感觉不需要全量吧 ,只需要取 10 个结果
    LukeChien
        7
    LukeChien  
       2019-01-24 16:07:16 +08:00 via Android
    用倒排索引做粗召回,百度可能召回 750 个,搜狗可能是 1000 个。然后对这些候选项做精排序,主要参考候选项本身的质量度和与查询词的匹配度,再加上各种人工干预算法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3638 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:30 · PVG 18:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.