在Square做了一年搜索的工程师想和你聊聊这些事(4)
此外还有一些比较细致的比较,我觉得这篇文章写得很好,推荐阅读:
Solr or Elasticsearch — That is the Question: https://www.datanami.com/2015/01/22/solr-elasticsearch-question/
个人感受
当年在 Square 的时候,其实 Solr 和 ES 都用过。最开始 Sqaure 的搜索后端是用 Solr 写的,和 Ruby 结合。当时 Solr 的一些定制,如 Schema,是一个 Repo,其 ETL 是在另一个 Repo。后来一次 Hackathon,我和几个同事因为好玩儿,用一周的时间用当时刚刚开始火的 ES 重写了一个搜索的原型(当然,只有一些最基本的功能,数据 Pipeline 都没有搭好,比较 Hack 地去写入一些数据。)通过这个简单的原型我们展示了 ES 的一些优势,所以后来就把整个搜索后端移到了 ES 上,做成一个独立的 Java Service。
那么当时我们从 Solr 转到 ES,是因为哪些优势呢?
一就是 Nested Typing。什么意思呢?打个比方,你需要 Index 一些类似于淘宝上店家的信息,同时又需要 Index 一些类似于商品的信息。而这两个数据之间其实是有一种类似于父子关系的联系的。ES 对此有着很好的支持。这样,你在 Indexing 的 ETL 中,可以自然地描述两个数据的关系(商品属于某店家),在查询时,也可以比较方便的写出需要对父类或子类进行 Filter 的 Query。而当时我们的搜索后端正需要这样的一个特性。虽然说用 Solr 也有办法 Work Around,但是那段代码会相对来说比较不易懂,也不好维护。
二是语法。Solr 和 Ruby 结合,很多程序可以写的特别小巧且灵活。而 ES 的纯 JSON 表达则略显臃肿。但是就好像 Ruby 和 Java 的区别,这种 JSON 表达更具有一致性,所有的代码会有很类似的结构,更好懂。另外 Solr 从最开始的设计就比较针对文本搜索。而 ES 对于非文本的数据似乎有着更好的支持。加上其比较一致性的语法规范,对于复杂的 Query 的组合,ES 语句的读写都要更简单明了。
还有一些和公司当时 Infra 相关联的其他因素。
一是前面说的,当时我们的 Solr 和 ETL 在两个 Repo 里。这样以来,每次的 Deploy 就需要两个 Repo Deploy 的相互协调。而且所有的代码改动的兼容性管理就略复杂。而 ES 我们是和我们的 ETL 一起做到了一个独立的 Java Service 里。代码管理和部署都相对简单的多。
二是数据 Pipeline 的建立。当时公司里 Kafka 的 Producer 和 Consumer 对 Java 有了比较好的支持,所以新的基于 ES 的搜索系统可以比较方便的从 Kafka 里拿数据。而 Solr + Ruby 的老系统只能使用比较老的 Trigger 和 Feed 来拿数据。这样一来,很多 Upstream 的数据管道的建立而言,ES 要干净漂亮的多。
三是性能。当时使用了 ES 的分布式支持,而老的 Solr 系统其实是单节点多 Replica 的架构。很自然的,查询性能上 ES 确实要好很多。
搜索和推荐
很多时候,搜索系统和推荐系统是可以共用部分后端 Service 的。因为他们可以使用相同的 Index 数据,也就是只需要建立一套数据 Pipelien 和 ETL系统。在此之上,Query 可以使用不同的方式来实现,从而达到搜索或者推荐的功能。ES 和 Solr 都提供了类似的不同的 API。(责任编辑:方向)
- “扫一扫”关注融合网微信号
免责声明:我方仅为合法的第三方企业注册用户所发布的内容提供存储空间,融合网不对其发布的内容提供任何形式的保证:不保证内容满足您的要求,不保证融合网的服务不会中断。因网络状况、通讯线路、第三方网站或管理部门的要求等任何原因而导致您不能正常使用融合网,融合网不承担任何法律责任。
第三方企业注册用户在融合网发布的内容(包含但不限于融合网目前各产品功能里的内容)仅表明其第三方企业注册用户的立场和观点,并不代表融合网的立场或观点。相关各方及作者发布此信息的目的在于传播、分享更多信息,并不代表本网站的观点和立场,更与本站立场无关。相关各方及作者在我方平台上发表、发布的所有资料、言论等仅代表其作者个人观点,与本网站立场无关,不对您构成任何投资、交易等方面的建议。用户应基于自己的独立判断,自行决定并承担相应风险。
根据相关协议内容,第三方企业注册用户已知悉自身作为内容的发布者,需自行对所发表内容(如,字体、图片、文章内容等)负责,因所发表内容(如,字体、图片、文章内容等)等所引发的一切纠纷均由该内容的发布者(即,第三方企业注册用户)承担全部法律及连带责任。融合网不承担任何法律及连带责任。
第三方企业注册用户在融合网相关栏目上所发布的涉嫌侵犯他人知识产权或其他合法权益的内容(如,字体、图片、文章内容等),经相关版权方、权利方等提供初步证据,融合网有权先行予以删除,并保留移交司法机关查处的权利。参照相应司法机关的查处结果,融合网对于第三方企业用户所发布内容的处置具有最终决定权。
个人或单位如认为第三方企业注册用户在融合网上发布的内容(如,字体、图片、文章内容等)存在侵犯自身合法权益的,应准备好具有法律效应的证明材料,及时与融合网取得联系,以便融合网及时协调第三方企业注册用户并迅速做出相应处理工作。
融合网联系方式:(一)、电话:(010)57722280;(二)、电子邮箱:2029555353@qq.com dwrh@dwrh.net
对免责声明的解释、修改及更新权均属于融合网所有。