boost项目复盘(三)

搜索
3.搜索模块大致来讲分为以下四大步:
1)分词:将查询词切成若干部分
2)触发:根据分词结果在倒排索引中查找哪些文档与查询词相关联
3)排序:根据相关性给文档排序
4)包装:最终将标题,描述,链接拼装成结果来显示

bool search(const std::string query,std::string* result)

这就是整个搜索模块的驱动函数,query中存放的是用户的查询词,result用来返回查询结果。看起来像是一个普通的string,实际上是一种特殊的结构——JSON。
由于返回的结果大致包含如下几个部分:1.许许多多个搜索结果。2.每个搜索结果又包含标题,url以及描述,即正文的一部分,一般要含有查询词。我们以查询词出现的地方,向前查询60个词,向后查询160个词,将显示不下的用 ... 来表示。
JSON的格式如下:
boost项目复盘(三)
其特点是:
1.使用[]表示数组,数组元素之间使用 , 隔开;
2.使用{}表示一组键值对,键值对之间也用 , 隔开;
3.键和值之间用 : 隔开
4.键的类型是固定的必须是字符串。
JSON格式最大的优势就是直观好看,是当前互联网中非常主流的一种数据组织形式,围绕这样的格式也产生了许多第三方库来进行操作。最后服务器把搜索结果就可以按照这个格式返回给网页前端,而网页端再根据这个格式进行解析就可以渲染出合适的页面。
得到返回结果以后就需要根据我们自定义的权重来给结果排序了。在调用sort函数时指定降序的排序规则就能使页面合理的显示结果。
第一次输入查询词“filesystem”时终端打印的搜索结果如下:
boost项目复盘(三)
看起来是不是像是乱麻,但仔细观察可以看到里面确实含有“标题 描述 url”这样的结构,再用在线JSON格式转换器转换便可以得到:
boost项目复盘(三)
与预期格式相同,目标达成。
至此,整个后端开发的部分全部完成。接下来,就需要一个好看的前端页面来展示后端完成的工作了,即最后使用cpp-httplib库搭建一个简单的http服务器,从而对外提供搜索服务。

猜你喜欢

转载自blog.51cto.com/14289397/2654584