搜索的本质就是输入一个关键词,返回跟这个关键词有关的对象(实体)列表。两层主要意思,第一,搜索本质是返回实体,隐含的意思是你必须先定义各种对象,这就需要OO,从系统中分析出各种类型的对象供搜索。这里背书了OO是前提——系统就是由各种对象组成,搜索就是找到你需要的对象的问题。 第二,和关键词有关的对象。这里有关是抽象的,就是一个link关系,对于自然语言文档类型的对象的搜索,这里的”有关系“就是包含关系,(文档文本里包含了这个词),对于数据库记录,可能是某个特定字段(或者任意字段,这个由你自己决定)的值是这个关键词,,还可以是某种业务关系,本质这个link可以任意加,取决于你是否建立key --> 这个对象的关联关系,是否希望这个对象被索引、被这个词索引。
twitte或者facebook的typeahead,你键入的时候,下拉框里不止是一种对象,有friends, 有events等等,这里引出一般的搜索架构:aggregator + leaf service,leaf service就是针对某种特定类型对象的搜索,aggregator并行向leaf service发出搜索请求,然后整合结果。类似windows 8的搜索,返回的是可能是文件,程序、配置项目等。各种对象本身是以一种树形关系存在,类似目录系统,原始的搜索所就是目录浏览那样去找东西。关键字搜索服务提供了一种平面化的搜索:输入关键词返回各种类型、层级的对象。
typeahead甚至是google的一个服务,不需要自己实现,只需要嵌入jQuery就行。本质上就是你提供一个关键词,google给你返回和这个词有关联的搜索词列表,只不过背后的数据是google维护的。typeahead对应的对象就是搜索词。(所有用户的搜索词本身也是数据,也可作为搜索的对象)