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

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

这就是整个搜索模块的驱动函数,query中存放的是用户的查询词,result用来返回查询结果。看起来像是一个普通的string,实际上是一种特殊的结构——JSON。
由于返回的结果大致包含如下几个部分:1.许许多多个搜索结果。2.每个搜索结果又包含标题,url以及描述,即正文的一部分,一般要含有查询词。我们以查询词出现的地方,向前查询60个词,向后查询160个词,将显示不下的用 ... 来表示。
JSON的格式如下:

其特点是:
1.使用[]表示数组,数组元素之间使用 , 隔开;
2.使用{}表示一组键值对,键值对之间也用 , 隔开;
3.键和值之间用 : 隔开
4.键的类型是固定的必须是字符串。
JSON格式最大的优势就是直观好看,是当前互联网中非常主流的一种数据组织形式,围绕这样的格式也产生了许多第三方库来进行操作。最后服务器把搜索结果就可以按照这个格式返回给网页前端,而网页端再根据这个格式进行解析就可以渲染出合适的页面。
得到返回结果以后就需要根据我们自定义的权重来给结果排序了。在调用sort函数时指定降序的排序规则就能使页面合理的显示结果。
第一次输入查询词“filesystem”时终端打印的搜索结果如下:

看起来是不是像是乱麻,但仔细观察可以看到里面确实含有“标题 描述 url”这样的结构,再用在线JSON格式转换器转换便可以得到:

与预期格式相同,目标达成。
至此,整个后端开发的部分全部完成。接下来,就需要一个好看的前端页面来展示后端完成的工作了,即最后使用cpp-httplib库搭建一个简单的http服务器,从而对外提供搜索服务。

©著作权归作者所有:来自51CTO博客作者wx5cb188ffabeef的原创作品,谢绝转载,否则将追究法律责任

更多相关文章

  1. MySQL常用的查询操作
  2. python入门教程13-08 (python语法入门之python索引原理与慢查询优
  3. 如何用Excel快速生成SQL语句,用过的人都说好
  4. TCPIP卷一(9):EIGRP的数据包格式、TLV、 三张表
  5. Oracle 闪回查询权限
  6. 控制器访问与参数解析类以及api天气接口实现输入城市查询天气
  7. 有了这 4 款工具,老板再也不怕我写烂SQL了
  8. 一文读懂MySQL的执行计划EXPLAIN
  9. 数据库CURD|常用的select查询|预处理

随机推荐

  1. 如何获得mp3文件的大小和持续时间?
  2. js的html元素的父节点,子节点
  3. 像C#一样,去写Javascript----记我的脚本库
  4. 不使用chokidar更新所需的节点/快速模块?
  5. Control javascript hide/show div with
  6. d3。scaleSequential不是一个函数。
  7. ionic之切换开关
  8. 使用Jquery打印div内容
  9. 选择jquery - 列表未以模态形式加载
  10. Jquery UI draggable不会调整其他DIV的大