写点什么

Q&A: 用 Elasticsearch 和 Solr 做相关性搜索

2016 年 12 月 08 日

关键点

  • 判断在各个不同的搜索用例之间“相关性”到底意味着什么,这很重要。
  • 根据用户期望,建立一种改进和再评估的良性循环。
  • 关注对搜索的评估,而不是搜索的解决方案。
  • 设计的未来是信息检索。
  • 对 Elasticsearch 和 Solr 的改进使得发开推荐系统不再令人望而生畏。

在 Doug Turnbull 和 John Berryman 的新书“ Relevant Search ”中,他们用一种有趣而又方便的方式向大家展示了如何解决搜索引擎相关性的调优问题。

书中主要讲解了 Elasticsearch 和 Solr,以及相关性工程师们该如何使用这些工具来构建合适的应用程序,以满足业务和客户的需求。在一个好的搜索引擎中,结果不只会根据事实的标准评级,也会根据与终端用户的相关性。判断成功还是失败都主要依靠提高评定的级别。而这本书的做法却有些不同:书的大部份章节都在讨论最好的方法,来超越这唯一的数字。

不幸的是,这个问题并没有唯一的正确答案。

通过一个全世界的《星际迷航》粉丝们都会喜欢的比较好的例子,这本书讲明了“判断用户到底想搜索什么”这件事有多困难。这本书并不是完全写给初学者的。有相关性经验的读者也可以从例子和理论中有所收获。

InfoQ 采访了 Turnbull,讨论了成为一个相关性工程师到底意味着什么。

InfoQ:请问对一个相关性工程师来说,非常典型的一天是怎样的?

Doug Turnbull:当我开始做一个相关性项目时,有很多事情都可能会占用我的时间。

首先,也是最重要的,我会试图分辨出在这个项目中“相关性”的确切含义是什么。每一个搜索的用例都是特别的。这个程序或者这个用例实现的重点,是不是用户每次都会非常细致地检查结果的呢?或者会不会这次搜索的目的只是为了取出一个值就可以了,那这样的话结果集中的第一个就应该是正确答案了?用户是不是这个领域的专家?他们愿不愿意使用复杂的搜索语法?或者他们也就是大众水平,想要的就是个象谷歌一样的东西?有时候这些就意味着对用户做深入分析。有多频繁用户会放弃搜索?他们得到了想要的结果吗?有时候需要与领域内的专家一起合作,来真正理解用户到底想要做什么。

第二,在我开始改进搜索时,我会需要确保我的改动的影响是可以被实时衡量的。这意味着把上一段话中收集到的信息转变成某些像 Quepid 一样的测试驱动的工作台。通过这样的工具,我就可以做出各种各样的解决方案,从简单的相关性调节,到高级 NLP 或机器学习,并且可以得到最直观的印象,它们对于我最重要的搜索到底有没有帮助。

第三,的确是有许多需要亲自动手的相关性工作的。这里并没有什么可以通吃的解决方案。有些问题只需要调节一下搜索引擎的查询方式就可以解决。还有的问题要做的解决方案就复杂得多。也许需要理解演讲的部分内容这很重要?或者可能你正在 Twitter 上进行搜索,而那些标签需要你有针对性地进行个性化处理?可能会有神奇的答案来解决问题……但也可能没有。

第四,除了对搜索结果进行严格的排序来帮助用户找到他们想找的东西之外,还有一些与用户经验有关的问题。有个人们常犯的比较大的错误就是过于关注真实相关性(但那只是对搜索结果的排序而已),却忽略了感知相关性。我提到感知相关性是指帮助用户理解为什么一个结果是相关的。这包括要保证你的内容里有描述性的标题,而且你也在上下文中突出了相匹配的关键词。其它的像分类、自动补齐和拼写检查等功能也可以帮助用户用他们自己的方法找出他们需要的东西,而并不需要 100% 完全匹配的真实相关性。

最后,这一点可能会让大家惊奇,就是要保证变更可以尽快发布。相关性的改动能不能以增量方式尽快发布出去?你的部署方式满足这样的条件吗?这些是运维要考虑的问题,但这也和相关性有非常大的关系。你需要尽快把你修改的东西发布出去,然后再重新评估你所做的改动是不是有积极的影响。

InfoQ:随着时间积累,一个相关性工程师的工作内容会发生怎样的变化?有没有可能会“定下来,然后忘掉它”?

Turbull:在有些情况下你的确可以“定下来,然后忘掉它”。比如说,你对威廉·莎士比亚的文集已经找到了非常好的搜索方法,那么,只要这些文集的内容不再改变,你的查询方式也就不需要改变了。

更重要的是,对威廉·莎士比亚的文集进行大量的搜索工作的商业动机也并不会非常多。

更典型的情况是,从用户的期望到你的程序设计,所有的东西都会变。孩子们可能用一种新的方言来进行搜索。在你的线上商店里,可能会有许多不同的产品,而旧的产品已经下架不再出售。

我们希望能够形成一种持续改进和对用户期望进行相关性重新评估的良性循环。这样才是更典型的例子:你不断地根据搜索的结果进行调整。

更重要的是,你会想要进行增量的和快速的调整,而不是慢吞吞的全面改动。将改动一小批一小批地发布出去,然后重新评估你的分析结果。如果改动没有达到预期效果,那就放手回滚。换句话说,我们更喜欢“敏捷”的方式,而不是一种一揽子式的相关性策略。你要知道,如果你基于去年夏天的数据和用户信息做了相关性调整,然后在今年冬天才发布,那这样的改动事实上已经没有意义了。

InfoQ:请问有哪些特别常见的错误?

Turnbull:对我来说,最大的错误在于只关注解决方案,而不关注对搜索的评估。

在我的工作中,相关性最困难的部分在于评估搜索是不是相关的。这要回答类似下面的问题:这些结果是正确的吗?用户对这些结果满意吗?这些结果是不是用户希望能从这样的搜索程序中得到的?是在这样的上下文中吗?我们的改动是不是取得了进步?

相关性工程师事实上并没有足够的能力知道搜索结果到底是不是相关的。相反,他们需要与非技术同事和领域专家一起,对用户数据进行分析并且评估搜索的正确性。这个事实上非常困难,即使是最好的分析方法,如果给它错误的上下文,它也可能会被误导。有时候程序非常专业化,分析学完全帮不上忙。

不幸的是,有些公司直接采用了“银弹”解决方案,或者某些令人兴奋的新技术,而没有给予评估足够的重要性。他们没有把时间花在进行评估上。比如,有种名为 word2vec 的现在很流行的技术,可以对你的搜索文档进行某种类型的搜索。Word2vec 是一种理解单词背后的语义关系的机器学习算法。理解单词“prince”和“king”是紧密相关的,或者“Anakin
Skywalker”和“Darth Vader”是同一个人。对我们技术工程师来说,一想到“哦,如果我搜索 Darth
Vader,结果就会出来 Anakin
Skywalker”,这似乎是件很酷的事。但事实上有可能这恰好是这次搜索想要得到的答案,也有可能这完全与搜索的目标不相关。

那些非常重视搜索效果的公司是绝不可能把搜索评估这项工作外包出去的。在这本书中,我们也写到了测试驱动相关性等方法来解释分析方法和技术,可以用这些来帮助解决这些问题。当你非常习惯于衡量相关性时,你就可以开始使用一些高级技术了,比如学习分级。

InfoQ:让通才去解决搜索这个问题是不是太困难了?

Turnbull:另一种考虑这个问题的方法是网页设计的演进。在最初的网页开发领域,没有几个人是被称为“网页设计师”的。比如在 2000 年时,我是一个通才的程序员,我可以通过在表格中排列好 img 标签来做出一个不错的 HTML 页面。但我却没有停下来,想想该去招一个设计师。为什么呢?那时候还是网页时代的早期,网页交互是很新的内容。慢慢地,用户的品味提高了,对于网站的交互式体验有了更高的要求。所以现在任何想通了的网站都尽量地加大了对设计的投入,和对“通才编程”的投入一样多。

我也是用相似的思路去考虑搜索的。谷歌已经让我们对好的搜索体验有了很高的期望。尽管这样,仍然有许多领域或专业应用方面是大有可为的。搜索医疗文章来帮助医生诊断病人,这事看起来和搜索你的电子商务库来成达一笔好交易没什么不同。这个与研究十九世纪早期的新闻完全不同。有些小功能看起来是相同的:自动补齐、搜索栏、高亮的搜索结果,等等。但在搜索栏中敲下每个按键之后背后的动作就变得完全不同。对搜索结果进行排序的方法也变得完全不同。现在已经出现了一种新型的“设计师”,专门做搜索背后的相关性和交互式会话的内容。

这就是对这座冰山的提示。现在许多短期流行的机器学习内容都是用来解决信息检索问题的:有些会针对单个用户返回根据个性化的相关性排过序的结果。许多初创公司都通过非常智能的搜索方法来驱动对话机器人。越来越多的推荐系统都是用 Elasticsearch 构建的了。

这就是将来的交互模式。设计的未来就是信息检索。Solr 和 Elasticsearch 结合他们的可扩展的工具集,可以领导下一代的设计和交互。

InfoQ:现在 Elasticsearch 和 Solr 看起来已经有了非常丰富的功能集。接下来还会有什么?随着时间的过去这些技术会发生怎样的改变?

Turnbull:Elasticsearch 和 Solr 都可以作为构建推荐系统的简易框架,都取得了不错的进步。我觉得这让许多中型公司开发推荐功能的门槛大大降低。同样的,Elasticsearch 和 Solr 也让开发搜索功能变得更简单,我觉得就是从已有的货架上挑出一个开源工具来,用它就可以基于相关性进行结果排序,这意味着不必再了解复杂而昂贵的机器学习解决方案了。比如我的合作者,John Berryman,他实际上就是做这个的:他用 Elasticsearch 为 Eventbrite 公司构建了一套推荐系统。但还有许多可以用得上的东西,其中就包括了 Trey Granger 的关于 Solr 和 Elastic 的图产品知识图谱

InfoQ:除了读这本书,还有哪些资源是那些刚入门的相关工程师们可以参考的?

Turnbull:好的,首先,有问题可以尽管联系我。我是一名咨询师,我也非常喜欢跟别人讲东西,所以我很喜欢别人来找我。另外要特别强调的是,如果你的公司里有人员配置的问题,我是可以免费提供一小时的知识分享的,或者说午餐时间学习安排。

就不错的搜索博客来说,我在我们公司的博客上写过不少东西。Sujit Pal 也在他的博客上写过非常多的东西,你也可以从中学到很多。我们也考虑到我的合作者并且会让他也多写一些,因为在我们合作的过程中,他为我们的博客贡献了非常多的内容

对于相关性和信息检索的图书,你肯定会想读读“ Introduction to Information Retrieval ”。“ Taming Text ”也是一本很不错的书,它把搜索和自然语言处理联系在了一起。我也还有一本关于相关性搜索的,讲的是实现相关性的业务级流程。

对于搜索引擎相关的图书,我推荐我的同事们写的“ Apache Solr Enterprise Search Server ”,“ Solr in Action ”和“ Elasticsearch in Action ”。

关于书作者

** Doug Turnbull ** 是 OpenSource Connections 公司的一名 Elasticsearch 咨询师,也是“ Relevant Search ”的作者。Doug 可以帮助客户开发更聪明、更符合上下文以及更个性化的搜索程序。Doug 非常喜欢构建那些有助于搜索相关性的工具,包括 Quepid Splainer Elyzer 等。

John Berryman刚开始工作时是一名航天工程师,但很快就发现他真正的兴趣在于软件和数学的交集。John 很快就换到了技术咨询行业,主要是全文检索方面。在这方面的主要工作包括为美国专利和商标局搭建了一套专利检查搜索系统、在国际上进行关于搜索技术和相关应用的演讲、以及将语义搜索和推荐整合到 Solr 搜索引擎中等。

阅读英文原文 Q&A: Relevant Search with Elasticsearch and Solr

2016 年 12 月 08 日 16:522849
用户头像

发布了 152 篇内容, 共 58.1 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试必须掌握的http网络协议知识

测试人生路

软件测试

Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的

华为云开发者社区

人工智能 智能车 hilens

二十多岁的年纪是怎么成功四面字节跳动,最终拿到offer的?

Java架构之路

Java 程序员 架构 面试 编程语言

GitHub标星力推!我掏空了各大搜索引擎,给你整理了188道Java面试题,满满干货记得收藏

Java架构之路

Java 程序员 架构 面试 编程语言

Java:利用BigDecimal类巧妙处理Double类型精度丢失

程序员小毕

Java 架构 编程语言 阿里 开发

面试必问的 Redis:主从复制

Java架构师迁哥

APICloud AVM 多端开发 |外卖 app 开发案例源码教程(上)

APICloud

Vue Web Worker 前端框架 移动终端 前端训练

本科毕业,六年Java开发经验,阿里技术三面+HR面,拿下38*16薪资P7offer

Java成神之路

Java 程序员 架构 面试 编程语言

Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)

Crud的程序员

spring 程序员

重点人员管控系统开发,情报研判系统开发

13530558032

限时!字节Java程序性能优化宝典开源,原来这才叫性能优化

996小迁

程序员 面试 性能优化 笔记

为什么香港云服务器更适合放新网站

德胜网络-阳

Github、知乎下载超过 28762W 次的 Java面试题库(附答案)

Java成神之路

Java 程序员 架构 面试 编程语言

阿里P9都赞不绝口的面试宝典!半月看完25大专题,居然斩获阿里P7offer

Java成神之路

Java 程序员 架构 面试 编程语言

一个企业用电有多浪费?90后开发者大显身手,让每度电从此更“聪明”!

华为云开发者社区

AI 物联网 智慧园区

速来围观!阿里P8大牛写出的JDK源码剖析及大型网站技术架构与业务架构融合之道

Java架构之路

Java 程序员 架构 面试 编程语言

智慧社区综合管理平台搭建,智慧平安城市建设

13530558032

区块链溯源平台优势,区块链溯源系统解决方案

13530558032

阿里P8亲授MySQL学习教程笔记,一个月吃不透那我真的白活了!

Java成神之路

Java 程序员 架构 面试 编程语言

2021 云原生走向何处?

云原生实验室

用一把吃鸡的时间,免费上云搭建网站应用

华为云开发者社区

服务 建站

Java岗四面字节跳动成功之前,我都刷了那些面试题以及做了那些准备!

Java架构之路

Java 程序员 架构 面试 编程语言

字节二面跪拜“Redis源码”后,面试官直接推荐这份笔记!真是NB

比伯

Java 编程 架构 面试 程序人生

周立齐出任电动车联合创始人:网红经济背后的病态消费心理

石头IT视角

微服务架构思考 - 理清楚,管起来

jorden wang

华为18级工程师总结的50W字算法、LeetCode、操作系统、计算机底层刷题必备笔记

Java成神之路

Java 程序员 架构 面试 编程语言

云上可靠性测试:让我们一起给开发找点事儿

华为云开发者社区

安全 云服务 可靠性

姐夫半夜不睡觉,竟躲在厕所看这“57道Redis面试题”?

Java架构之路

Java 程序员 架构 面试 编程语言

加密猫MIMI系统APP开发|加密猫MIMI软件开发

开發I852946OIIO

系统开发

Flash Player终将成为历史,HTML5正站在舞台的中央

Geek_Willie

PostgreSQL 13 RPM中有哪些新功能?

PostgreSQLChina

数据库 postgresql 开源

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

Q&A: 用Elasticsearch和Solr做相关性搜索-InfoQ