本书揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可编程的相关性框架,从而表达业务排名规则。从这本书中你可学会如何结合各种外部数据源、分类方法以及文本分析手段对相关性进行编程,以满足用户的个性化需求,将令人满意的搜索结果呈现给用户。此外,相关性搜索也需要一定的软性技能。
本书还将告诉读者怎样与业务人员协作,为业务找到正确的相关性需求,从而在搜索产品的整个研发生命周期内,实现相关性改进的良性循环。
本书介绍了搜索引擎的基本原理,及相关性搜索的调试技术,用大量实例的方式详述了搜索引擎的诸多特性,以形成一整套针对相关性搜索的系统化方法,并倡导致力于提高搜索质量的企业文化。
本书适用于想利用 Elasticsearch或 Solr尝试构建智能搜索应用的开发人员。
利用自然语言处理技术,进行个性化推荐;
基于最常见的开源搜索引擎Elasticsearch与 Solr;
书中例子均使用Python语言编写
莫映,IBM中国软件开发实验室顾问软件开发工程师,具有超过10年的软件开发与设计经验,目前从事IBM社交商务软件的研发工作。一直关注社交网络的应用与社交技术的运用。同时也积极活跃于IBM内部以及外部的各种技术社区之中。
蔡宇飞,IBM中国软件开发实验室软件开发工程师,目前从事IBM社交商务软件的研发工作,对云技算、大数据有浓厚兴趣。
殷智勇,IBM中国软件开发实验室IBM Domino高级软件开发工程师,对社会化协作软件、大数据搜索等领域较为关注,并有较为深入的研究。
John和我是在共同为 OpenSource Connections(OSC)做咨询工作、帮助客户解决棘手的搜索问题时认识的。我们有时一起诊断性能问题(好让系统跑得更快),有时帮助构建搜索应用。所有项目都有一系列衡量成功与否的简单指标:系统运行更快了吗?应用开发完成了吗?但是,搜索相关性并不遵循这些规则。而且从谷歌时代成长起来的用户是不会容忍“还算凑合”这样的搜索的。他们想要的是“绝顶聪明”的搜索。他们希望搜索能够优先考虑其所关心的条件标准,而不是像搜索引擎通常那样,盲目地去猜测相关性。就像飞蛾被火焰所吸引一样,我们都被这一难题深深吸引了。而且正如所谓的飞蛾那样,我们也常常发现自己是在“扑火”。经过这些惨痛的教训,我们坚持了下来并且得到了成长,在我们最初认为极其困难的任务上取得了成功。在此期间,我们在 OSC的博客上也看到了同样的心声。我们意识到有关搜索相关性的问题被记录下来的文字少之又少。于是,我们提出了诸如测试驱动相关性(test driven relevancy)这样的观点。我们记录下了自己心中的困惑、遇到的问题,以及取得的成功。我们一起试验了机器学习的各种方法,比如潜在语义分析( latent semantic analysis)。我们研究了 Lucene的内部机制并探索了通过构建自定义搜索组件来解决实际问题的相关技术。我们还开始了对信息检索的研究。随着我们所掌握的解决疑难问题的技术越来越多,我们也持续不断地将它们记录为文字。然而,博客有其自身的局限性。 John和我一直希望以书的形式更加系统地阐明我们的观点。幸运的是,我们经历了一连串有趣的事情,机会往往就会自动找上门来。我在一个本地的技术交流会上与 Andrew Montalenti一起做了一个关于 Python并发的演讲。因为 Andrew在 PyCon上做过这次演讲, Manning就给 Andrew打电话来讨论写一本关于 Python并发的书。 Andrew说他对写书不感兴趣,但或许他的联合演讲人 Doug会感兴趣。
可惜我对写一本关于 Python并发的书也不感兴趣,但我的确有写另一本书的想法。带着这个想法我找到了 John,经过几番谈话之后,我们共同提出了一个非常激动人心的出书提议—接下来的事大家都知道了!
大约在两年前,我们与 Manning通了那次意义重大的电话。就像是在坐过山车一样,光阴荏苒,伴随着本书的写作,我们的生活也经历了一系列重大的变迁。我们两个人的家庭都增添了小宝宝。我开启了一项相关性的咨询业务。 John换了工作,成为 Eventbrite的常驻搜索专家。但我们还是无法拒绝继续为这个让人着迷的话题撰写文章。
你会发现本书不同于其他技术类的书籍,它不是某项技术的功能罗列。它更像是一张地图,指引着我们走出多年的痛苦,去解决那些没有现成答案的难题。换句话说,我们已经走出了搜索相关性的沙漠,发现了许多绿洲,并且学会了如何躲避沙人和帝国突击队。
我们向大家展示这张穿越沙漠的地图,这样大家就不会像我们那样迷失方向。现在,请原谅,我们要找一处最近的海滩来小憩一会儿了……
Doug Turnbull
致谢
在开始撰写本书的几周前,我们两家都迎来了小宝宝。我们要把最诚挚的感谢和爱意送给我们的爱人, Khara Turnbull和 Kumiko Berryman。我们把连续数个周末的时间都用来写书,而她们也都坚持了下来 —在此期间, Khara完成了她自己的一本书,Kumiko成功地经历了一次长途越野和房屋出售。现在是时候放个长假了!
本书的成功付梓也离不开 OpenSource Connections的创始人 Eric Pugh。作为我们的“老板”,是他把我们推到了写作、演讲和解惑的聚光灯下。作为一位领导者, Eric能够让你的热情成为他的热情。如果不是 Eric摘掉“辅轮”(有时甚至坚持“独轮”),我们就不会意识到,自己竟然能胜任写作或解惑的工作。 Eric告诉我们,每个人都可以成为思想领袖,包括我们自己。
感谢 TMDB提供的数据和支持。我们曾经花费大把的时间试图找到理想的数据集。TMDB(http://themoviedb.org)不仅提供了丰富的搜索数据集,而且在我们遇到程序错误和问题的时候(通常是我们自己的代码里的错误),TMDB也能为我们以及我们的早期读者提供支持。特别要感谢的是 Travis Bell,他总是及时回复我们的问题和邮件。
写书是一项团队活动,我们要感谢 Manning出版社本书制作团队中的每一位成员: Marina Michaels,我们的开发编辑; Aaron Colcord,技术开发编辑; Valentin Crettaz,技术校对; Frank Pohlmann和 Mike Stephens,策划编辑;还有负责营销的 Candace Gillhoolley。
我们也要感谢很多参与审稿的朋友,他们阅读了本书最初的书稿,并提出了许多有益的建议,包括 John Guthrie,Martin Beer,Arthur Zubarev,Elman Krinker, Amit Lamba,Marc-Oliver Scheele,Ian Stirk,Joseph Wang,Stuart Woodward, Ursin Stauss,Russ Cam,Michael Fink,Gregor Zurowski,Dimitrios Kouzis-Loukas,Jeremy Gailor和 Keith Webster。
另外要感谢 Andrew Montalenti,他为我们与 Manning建立了联系。还要感谢 Shay Banon的帮助,他是 Elasticsearch的创始人,坦率地说,他是一个很和蔼的人。感谢我们的同事, Trey Grainger,Matt Overstreet,Rena Morse,David Smiley, Grant Ingersoll,Yonik Seeley,Rene Kriegler,Peter Dixon-Moses,Charlie Hull和 Drew Farris,感谢这些年来与我们在搜索和相关性方面的这么多精彩讨论。还要特别感谢 Trey,他为我们这本书写了推荐序。
感谢每一位家人对我们的支持。尤其是我们的孩子们: Megume Berryman,Ian Turnbull和 Murray Turnbull。感谢我们在 OpenSource Connections和 Eventbrite上的“工作大家庭”,让我们能够把大量精力投入到本书的写作上。
关于本书
本书将告诉大家,在响应用户的搜索时要给出用户满意和认可的内容。我们将学习如何根据搜索条件,而不是对搜索引擎的神秘猜测,来严格控制对搜索结果的排名。我们会简要介绍深入定制 Solr或 Elasticsearch相关性排名的方法,以及如何采取措施帮助大家发掘相关性对应用而言的意义。
谁应该阅读本书
本书的目标读者是那些渴望了解为什么搜索引擎无法“领会”用户搜索意图的 Solr或 Elasticsearch开发人员。对搜索引擎至少有基本了解的读者,可以通过本书将他们的技能提升到更高的层次。虽然这是一本技术方面的书籍,但从组织机构和产品战略的角度来看,它的大部分内容都是围绕相关性展开的,因此也适合于产品经理、内容战略的制订者、市场营销人员,或专注搜索的领域专家阅读。
本书是如何组织的
本书首先介绍了相关技术的基础知识,然后逐步上升到定义和解决搜索相关性问题时我们所要面对的产品策略和文化议题,最后介绍了如何实施个性化搜索、语义搜索以及推荐。
第 1章从讨论相关性问题开始。问题涉及的领域包括网络搜索、电子商务,以及专家搜索等。本章讨论了学术界对于我们在相关性领域所做的尝试都提供了什么样的支持。最后,我们简要介绍了本书在解决相关性问题时所采取的技术策略。
第 2章对 Lucene的核心数据结构及其算法做了快速回顾,因为它们与相关性是紧密关联的。我们将会看到,为了寻找相关性内容,基于 Lucene的搜索为我们提供了一个如此令人难以置信的框架。
第 3章告诉大家如何对相关性进行调试。在第 2章介绍的数据结构和算法不起作用的时候,我们就需要拿出自己的“工具箱”,弄清楚搜索在哪里出了问题。
第 4章展示了如何利用搜索引擎的分析流程将内容和搜索分解成可描述的特征。这一基本技巧可以让我们学会如何利用分析手段让所有内容都能被找到。
第 5章开始讨论针对多个字段的查询策略。在本章中,我们会告诉大家如何构造查询语句,有针对性地去度量那些在搜索阶段对用户而言至关重要的排名因素。
第 6章继续我们有关查询策略的讨论。在这一章我们重点关注的是以词为中心(term-centric)的技术,以及相应的搜索策略,以支持用户对相关性的朴素理解。
第 7章为大家展示了评价调整( score-shaping)技术,比如放大( boosting)和过滤( .ltering)。我们时常需要突出近期产生的内容、高利润率的产品,或者距离较近的位置,以此来对搜索加以控制。
第 8章为大家展示了一系列可以帮助用户找到相关性内容的替代方法。有时,当相关性排名效果不佳的时候,一些 UI组件,比如可供浏览的切面( browsable facets)、自动补全( autocomplete),以及高亮显示( highlighting),也许用这些方法将用户引入正途更为简单。
第 9章我们构建了一个完整的以相关性为目标的搜索应用,本章将会为大家奉上具有专业眼光的 Yowling。既然已经掌握了相关性技术工程师所具备的一系列技能,本章我们将从头至尾见证一次完整的产品开发流程。
第 10章从产品战略的角度上升到了一个更高的层面,其目的在于关注文化和组织机构方面的一些因素。一个关注搜索的组织是如何确定何谓相关的呢?我们会看到,一个组织必须实现快速而准确的反馈回路,才能正确引导相关性技术工程师的研发工作。
第 11章将我们的视野拓展到了搜索引擎以外的地方。本章会向大家介绍机器学习、个性化搜索,以及语义搜索是如何协同工作,一起来提高搜索引擎的相关性排名的。
附录 A带领大家按照我们曾经走过的流程,利用 The Movie Database(TMDB) API一步步将本书所用的数据载入 Elasticsearch中。
附录 B通过对照 Elasticsearch和 Solr之间的相关性功能,指导 Solr读者阅读本书。
关于代码
本书包含了许多源代码的例子,形式包括带编号的清单,以及普通的文本行。对于这两种情况,源代码都以等宽字体进行了格式化,从而将其与普通文本进行区分。有时代码也会以粗体显示,目的是为了突出相对于本章前面步骤的变化,比如当一个新功能被加入已有的代码行时。
在许多情况下,最初的源代码都已经被重新进行了格式化处理;我们加入了换行并修改了缩进,目的是为了能够适应本书的可用版面。另外,当我们在文中对代码做了解释之后,源代码中的注释通常会被从清单中移除。许多代码清单都会伴有一定的注解,旨在突出显示某些重要的概念。
这些例子都已在 Elasticsearch 2.0和 Python 2.7下测试通过。
大家可以在 Manning的网站( www.manning.com/books/relevant-search)上以及本书的 GitHub库(http://github.com/o19s/relevant-search-book)中找到第 3章至第 9章的代码。为了便于试验,这些例子都是用 iPython Notebook/Jupyter编写的。 README文件详细说明了运行代码所需的准备工作。
作者在线
购买本书的读者可以免费访问一个由 Manning出版社运作的私有论坛,在那里你可以对本书发表评论、询问技术问题,并得到作者和其他用户的帮助。要访问和订阅该论坛,请在浏览器中打开 www.manning.com/books/relevant-search。该网页提供的信息包括:如何在成功注册之后加入论坛,你可以得到什么样的帮助,以及论坛内的行为规范。
Manning出版社承诺为读者提供这样一个场所,在那里不同读者之间,以及读者和作者之间可以建立起有意义的对话。本书作者并不承诺任何具体程度的参与,他们对本书论坛的贡献是自愿的(无偿的)。我们建议大家试着问一些具有挑战性的问题,以激起他们的兴趣!
本书一经出版,就可以通过出版社的网站访问作者在线论坛和以往讨论的存档。
其他在线资源
如果你想了解更多信息,我们推荐以下质量不错的资源。
. OpenSource Connection的博客(http://opensourceconnections.com/blog)。
. John Berryman的个人博客(http://thoughtbox.solutions)。
. Elastic的博客(www.elastic.co/blog)。
. Lucidwork的博客(https://lucidworks.com/blog)。
. Salmon Run,Sujit Pal的 Solr博客(http://sujitpal.blogspot.com/)。
. Solr Start的简讯(www.solr-start.com)。
有关搜索和信息检索方面更为一般性的讨论,我们建议参考下面这部宝典:
. 由 Christopher Manning等人编写的 Introduction to Information Retrieval,(剑桥大学出版社,2008),http://nlp.stanford.edu/IR-book/。
有关 Solr/Elasticsearch的具体问题,我们建议访问各自的技术论坛:
. http://discuss.elastic.co。
. http://lucene.apache.org/solr/resources.html。