代码之家  ›  专栏  ›  技术社区  ›  Chris Adragna

FaceBook搜索:它有哪些技术要求和创新功能值得关注?

  •  3
  • Chris Adragna  · 技术社区  · 15 年前

    Facebook已经在他们的搜索引擎中加入了一些独特的功能——甚至有些可能已经获得了专利?我所说的特性是由三个不同的需求驱动的:

    1. 他们的用户的期望是由其他搜索体验形成的,即Google,因此长尾搜索查询是通过在被搜索的人的名字后面附加关键字来完成的,例如“奥兰多,佛罗里达”或“扶轮社”(或其他一些识别值,如雇主的名字)。
    2. 基于我们从应用程序中看到的窗口,数据架构看起来很浅(当然不是浅)。我想说的是,除了用户配置文件中所谓的“基本信息”(如性别和当前城市)之外,很多使配置文件独特的信息并没有严格地分配给逻辑列。

    因此,复杂性存在于与数据集大小相关的需求中,但同时也需要向用户提供相关的结果,向一个不擅长搜索的用户社区,但他们的期望和培训是由谷歌提供的。

    考虑到所有这些(对我的问题进行了改进):

    a、 () FaceBook需要哪些搜索功能,我们应该注意并在自己的搜索应用/引擎中部署这些功能? 我所说的必要性,是指数据集的庞大规模,或者是用户的期望,以及网站有机增长和增加数据之间关系的需要——我是说,用户。

    b、 () 哪些搜索功能具有创新性,值得数据和/或搜索架构师关注?

    其中一些是显而易见的,比如对名字使用同义词——将“Bill”查询与“William”记录进行模糊匹配。您可以在Solr中使用同义词列表来完成此操作。我认为这是一个基本的功能,是必要的,而不是创新的。

    创新值得我们关注。第一个创新的例子,我可以提请注意的是,他们的搜索相关性是定制每个用户。如果我键入“John Smith”,我得到的结果将与其他搜索者不同(理论上,对我、我的人际网络中的人、朋友的朋友等都比较匹配)。在你说这不是创新,因为你可以键入“比萨饼”在谷歌,他们会给你相关的结果,通过附加你的地区到查询,请跟随。我希望,对这个问题的回答和讨论,真的,能够包含一些技术要求,并提供一些在搜索中作为特性包含的想法。

    • 你猜他们会运行一个常规的批处理过程来反规范化数据吗?(即,一个批量作业,用于生成一级分离、二级分离等的链接表)
    • 从这样的批处理或非规范化中,它是否限制了命中数?仅返回逻辑上最接近的“John Smith”匹配就证明了这一点。然而,搜索不常见的名字[比如我自己的名字和姓氏]似乎不受结果限制的影响,搜索将环顾世界,完全不受那些“几度”的分离影响。
    • 他们是否在按年龄增加相关性得分,使搜索者与接近同一年龄组的匹配更具相关性?(评论:似乎他们应该这样做,这至少可能是一个不应该发生的代际交流/会议的小减速——委婉的,我知道)

    从技术上讲,在后端,最好在数据库级别执行一个非规范化过程,然后对“文档”进行索引(澄清:对于那些统一到企业搜索的人来说,“文档”在概念上与数据库记录相似。。。摩尔)

    当然有必要对这些信息进行预处理。我自己在实践中没有做过这样的事情,在我看来,在数据库级别分批去规范化是有利的,原因是搜索服务器擅长超快速地查找信息,但是数据库服务器更擅长获取匹配的数据(假设它扩展到不在搜索索引中的相关列)。

    即使没有将John Smith添加为好友,这次对John Smith的后续搜索也会在下一次返回该结果。 [我想知道多久之后才会过时,或者它是否真的过时了?]

    我用Facebook作为例子,因为它们很大。它们的大小迫使人们建立一个经过深思熟虑的架构——比如什么保持正常的形式,什么不能,因为你就是不能 JOIN 一个1亿条记录表重复(从链接表或 derived table

    相关性调整的实践几乎是一门艺术。数据集、业务规则和用户的期望都是独一无二的,几乎不可能创建一个多用途的评分模板,甚至是一个最佳实践。

    也就是说,通过寻找那些在搜索方面做得很好的大型网站,有一种技术可以效仿,不是吗?

    FaceBook有哪些技术?考虑到它们的规模,它们不能在用户需要时通过ORM(而不是向ORM冠军发起猛击)获取它们所需的内容——这需要精心规划的规范化、SQL级索引、反规范化和搜索服务器索引。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Stephanie Page    15 年前

    对于数据库,Facebook使用MySQL是因为它的速度和可靠性。 因为数据是随机分布在一大组逻辑实例中的。这些逻辑实例分布在物理节点上,负载平衡在物理节点级别完成。

    对于某些部分,比如inbox,它使用NoSQL数据库,它是“最终一致的”,当你查询一个集群时,你会得到“当时的最佳答案”,而不一定是正确的。

    从你的部分问题来看,你似乎正在尝试采取一些对社交媒体有效的做法,并将其应用得更广泛。最终,Consistant不会在会计、交易、医疗或研究领域工作。如果这是范妮阿姨最新的猫照,没人会在意FB页面是否一直显示最近的一张。你愿意为了这些陈词滥调而牺牲准确性。

    因为FB这么做,所以把每三个标准形式的商业应用程序都变成键值对,这不是我愿意乘坐的火车。

        2
  •  1
  •   Mauricio Scheffer    15 年前

    这个问题有点模糊,我们只能猜测Facebook做了什么。

    但是我们可以讨论一个典型的Solr搜索是如何工作的,这是一个更具体的话题。是的,你 去规范化数据( here are some good tips on Solr schema design )将数据加载到Solr索引时。这个ETL过程可以通过 Data Import Handler ,或自定义ETL进程。数据源可以是任何东西,而不仅仅是关系数据库。如何设计模式在很大程度上取决于要执行的搜索类型。

    完全非规范化(Solr实际上有一个平面模式)意味着没有连接,所以它是相当可伸缩的(参见Solr) shards replication

    你的另一个顾虑是搜索结果的相关性。这里,索尔是 非常 可调(参见 Relevancy Cookbook FAQ ). 是的,正如您所说,这几乎是一门艺术,因为每个应用程序都有不同的相关性概念,所以需要进行不同的调整。然而,对于开箱即用的Solr实例来说,默认的相关性通常是可以接受的(Solr和Lucene开发人员对此表示赞赏)。