搜索引擎优化高级编程:php版(悟空开源项目是用Go语言编写的全文搜索引擎(图))

优采云 发布时间: 2022-04-03 07:09

  搜索引擎优化高级编程:php版(悟空开源项目是用Go语言编写的全文搜索引擎(图))

  近日,Go语言1.第5版正式发布,Go语言在国内的学习与应用逐渐走红。InfoQ 也将关注并推动国内 Go 语言社区的发展。Wukong 开源项目是一个用 Go 语言编写的全文搜索引擎。InfoQ 记者采访了其作者陈辉,了解了这个项目背后的一些信息。

  Wukong 搜索引擎是高度可定制的,具有以下功能:

  项目结构如下:

  

  引擎中用户请求的处理、分词、索引和排序都是由不同的 goroutine 完成的。

  主协程用于发送和接收用户请求。Segmenter协程负责分词索引器(indexer)协程,负责建立和查找索引表ranker(ranker)协程,负责文档评分和排序

  具体原理可以看入门教程,在本教程中作者用不到200行的Go代码实现了一个微博搜索网站。

  这个项目的作者是陈辉,曾在美国谷歌工作。2014年回国后加入阿里巴巴,现任大数据营销总经理。

  在这篇文档中,他谈到了创建悟空搜索引擎的初衷:

  知识应该易于获取

  ...

  一般的搜索引擎无法解决这个问题:一是无法进行针对性的垂直搜索,内容的爬取和索引简单粗暴,无法获取结构化数据,看不到隐藏的内容属性;内容的排序是不可定制的,也不足以成为 网站 社区的有机组成部分。

  一个好的网络社区应该让用户边看书边搜索,搜索应该成为阅读的一部分;网站内部流量应该是个性化和有机化的,而不是被死板的推荐系统所主导。可惜这样的网络社区很少。这种情况的部分原因是缺乏开源、易于定制和高效的搜索引擎。

  他的另一个初衷是应该普及搜索引擎技术:“所有大数据领域的工程师都应该在职业生涯的某个阶段尝试重写一个搜索引擎,了解其中的技术问题,并尝试解决它们。 。”

  InfoQ 记者采访了他,了解他对 Go 语言的看法以及 Wukong 搜索引擎背后的一些故事。

  InfoQ:你是怎么接触到 Go 语言的,你还关心 Go 语言吗?

  陈辉:我第一次听说 Rob Pike 的 TechTalk 是从 Google 内部的一张海报上得知的。关于一门新的编程语言,我一直对新的编程语言很感兴趣,所以就去听听了。

  当时,谷歌内部有鄙视 Python 的趋势​​。一位高级工程师还写了一篇文章文章《为什么不应该使用Python》,主张100行以上的代码不应该用Python编写。我自己在使用 Python 时也很头疼。我觉得这是一种临时语言。编写的代码不容易维护,更糟糕的是,它仍然很丑陋。

  听完TechTalk,第一印象是Go可以替代Python进行快速开发,所以我用Go写了几个内部小项目,非常方便。当时,Rob Pike 还亲自审阅了我的代码,并就如何使用它提出了很多建议。

  后来我的开源项目基本都是用Go写的,包括中文分词、机器学习等。见我的GitHub项目列表。

  我现在写的不多,因为我工作很忙,但我还是推荐给那些想从头开始一个新项目的人。

  InfoQ:谈谈你使用 Go 语言的经验,它的优点和缺点是什么?

  陈辉:最大的优点就是容易维护。写了几个月的代码,完全没有什么奇怪的感觉。似乎只有一种方法可以在 Go 中编写函数。还有 gofmt,一个格式化工具,它使团队中每个人的代码风格都一样。Go 是一种不会让团队其他成员在查看代码时皱眉的语言,没有什么比这更重要的了。

  其次,Go 语言具有 C 语言的优点,但没有 C++ 语言的弱点。首先是强类型语言,弱类型语言不应该是任何严肃的软件项目的选择。那么 Go 的接口可以满足 90% 以上的 OOP 需求,而且没有 C++ 的缺陷。最后,执行速度足够快。

  然后,Go 具有出色的代码管理、构建和分析功能。导入 GitHub 就像使用本地目录一样,自然解决了开源软件中协同开发的问题。profiling的能力强大,构建系统代替了一个好的IDE的主要功能。

  最后,goroutines 提供了自然的并发编程支持,这是我最喜欢使用的特性之一。

  当然,它也不是没有缺点。在我看来,Go 有缺点:对虚函数的支持不是很好(或者说不存在?),不能通过继承来实现代码复用。此外,指针的使用有时令人困惑。

  InfoQ:请介绍一下“悟空”开源项目的发展历程。

  陈辉:第一次写是2013年7月,基本上是利用周末的时间,用了一个月的时间写了悟空的主要代码,8月初扔到了GitHub上。2014 年 1 月,持久存储被添加到引擎中,一些贡献者贡献了代码。

  我告诉你,阿里巴巴内部已经使用悟空了。

  InfoQ:悟空与其他搜索引擎相比有什么特点?

  陈辉:据我所知,还有一个用Go写的搜索引擎,Bleve,但是好像不支持中文分词。

  悟空不是一个完整的搜索引擎,我从未打算让它完整。我只是想写一些基本的代码,可以很容易地修改,并且可以集成到你的业务需求中。这些代码只实现了基本功能,足够简洁,您可以理解它们并快速修改它们以实现您想要的功能。换句话说,你只需要一天时间就可以熟悉 Wukong 的代码,并把它变成你自己的搜索引擎。

  InfoQ:能否介绍一下悟空搜索引擎应用于高并发、大数据量场景时可能出现的性能瓶颈?以及有哪些优化方法?

  陈辉:目前悟空的索引结构是基于内存的,单机内存大小已经成为瓶颈。解决方案有两种,一种是引入SSD等存储,另一种是分布到多台机器上。我更喜欢后者,因为内存会越来越便宜。

  InfoQ:悟空搜索引擎未来的发展规划是什么?

  陈辉:如果有时间,我们可能会加入 docker 的支持。

  如果您想了解更多关于 Wukong 搜索引擎的信息,这里是 .NET 社区知名开发者 Oren Eini 的一篇探索其代码的文章 文章,供感兴趣的读者阅读。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线