天天看点

搜索正在遍及世界

大部分工作人员刚刚从Lucene Revolution社区回来。与Lucene/Solr社区的精英们一起参加活动实在是一次让人无法忘怀的经历。我们可以越来越明显的看到,搜索类控件已经逐渐成为现代应用的主流UI元素。这些应用的用户期待更加丰富的交互性,并且由于搜索控件已经越来越智能化,搜索控件正在成为与大数据和复杂应用进行交互的核心。

搜索作为主要用户界面

谷歌和Siri使得我们所有人都期待将智能搜索作为主要的用户界面。Lucene社区的一个有趣的例子就是ADP人力资源系统,该系统完全放弃了用户界面,倾向于使用搜索引擎来理解各种动词或者名词所表达出的行为倾向,随后会向用户呈现可以在人力资源系统中采取动作的搜索结果。但是“聘请约翰史密斯”(Hire John)和“入职约翰史密斯”(Onboard John)作为强关联的两种行为,对于不幸名为“约翰 海尔”(John Hire)的搜索动作可能就会与搜索结果不太相关。

与谷歌和Siri一样,这类产品告诉我们即使在日常生活中也能与应用互动。我们不再将计算资源视为特定命令的严格执行者。相反,我们期望应用程序可以模糊理解和推断我们的意思。换句话说,我们喜欢搜索展示出来的页面数据,但期望可以搜索的内容不仅仅是文字。我们希望搜索引擎可以更加智能化 - 机器学习和自然语言处理。我们希望它以用户为中心,并专注于我们的需求。

一旦您致力于将搜索作为您的用户界面组件,您就致力于通过其他系统丰富您的搜索引擎。大数据是这种范例的一个明显例子。正如我们相信开源链接(OpenSource Connections)一样,搜索是处理大数据最直接的方式。但是,一旦您决定将搜索作为您的主要UI组件,您必须找到科学的方法去处理您可能应用于结果集中的所有数据。“智能化”的目的是为了友好的用户体验,而面向用户的搜索框恰恰为探索这些数据提供了更为友好的体验。

一个例子就是LucidWork的大数据系统(LucidWork’s Big Data System)。该系统使用搜索组件作为整个系统结构体系中的核心UI组件,并且,该搜索引擎应用机器学习和OpenNLP来丰富大数据搜索中的结果集。

Grant Ingersoll和Ted Dunning提出了一个参考架构,该架构表达了这个想法的许多部分。可以使用Solr(一个企业级全文检索服务器,与Lucene类似)作为探索数据的主要方法。来自机器学习和批处理数据的反馈可以通过简单地添加或修改字段来丰富搜索结果。一旦数据结果准备就绪,全文搜索的功能就可以接管了。

Solr作为理想的数据结构

为什么像Solr这样的搜索引擎是探索所有这些数据的理想手段?Solr对可索引的内容几乎是没有任何限制的。默认对所有的内容都添加了索引。然而,数据库(NoSQL或其他类型数据库)要求我们考虑清楚如何在一列中选择一个极小范围的子集以便我们稍后索引或查找。但是,稍后如果你想查找一个没有索引的列,你会不知不觉地把事情搞砸,整个系统都将被拖慢,因为整个列在线性扫描你想要查找但却找不到的未标记数据。

但Solr是不同的。倒排索引数据结构是从索引优先的角度写入的。字段常常被索引但是却不被存储——实际的存储并不重要或者已经在其它地方完成。可以查找任何东西的能力让我们能够在任何领域进行全文搜索,但在大数据的背景下,分面导航(Faceted Navigation)就是搜索真正发挥作用的地方。正如Trey Grainger的演讲所展示,“分面(facets)”允许以一种非常广泛的方式来分解一个字段中的值。这个简单的工具通常提供令人惊讶的分析能力。除了索引字段以外,没有什么特别的要求 - Solr毫不费力。

这种功能的一个简单例子是通过集群算法丰富Solr文档。一旦每个文档都用一个字段作为索引来指示其集群,就可以在Solr中非常轻松地探索这些集群的性质。首先,用户查看集群分解的每一个方面,并各自计数。然后,用户可以按照群集值进行过滤,查看过滤之后的其他方面再如何细分。例如,我们可以在我们的文档集中发现围绕特定的自然语言形成的最强大的群集。当我们在一个方面进行过滤时,突然在自然语言中只有“中国”两个字,那么有关其他自然语言的文件将不再返回。对传统数据库(SQL或NoSQL)做类似的事情需要对许多列进行索引,这对于大多数构建数据库的人来说都是十分繁琐的。

Solr的未来

Yonik 在他的主题演讲中指出了Solr的未来目标。借助Solr云,Solr看起来更像是一个把搜索功能已融入其核心的NoSQL解决方案。正如马克米勒(Mark Miller)在他的演讲中所说的:“Solr从搜索引擎开始逐渐回到解决相关的存储问题;而 其他解决方案从存储问题开始,并试图回到搜索上来“。越来越多的人认为Solr的主要作用是数据的存储。对于大多数用户而言,它比数据库更友好,而且Solr正在逐渐成为真正的分布式存储引擎。

充实Solr的数据库功能还包括添加更多不同类型的连接功能。数据不能总是在没有许多烦人的副作用和限制的情况下被非规范化。Solr非常适合跨文档提供非常复杂的连接功能,包括添加模糊连接或自然语言连接。也许与原始查询的相关性可能会影响到第二个查询中的文档。在我的演讲中,我谈到了这个问题 - 一旦我们从数据库中找到前5个最相关的专业术语,就可以用外行人的术语搜索法律专业术语数据库(汽车(car) - >机动车辆(motor-vehicle)),然后我们可以在“法律用行话语料库”中的技术术语来搜索法律相关术语。

越来越多的搜索引擎已经成为了应用的核心内容,而不是一个附加在主体之上的装饰物。当然,人们需要的不仅仅是搜索。随着机器学习和自然语言处理等相邻技术成为普通应用程序中越来越普通的组件,未来将十分令人期待。我们将真正生活在一个更聪明的世界,在这个世界里,搜索是电脑的耳朵和嘴巴!