下一篇:C++项目:基于boost在线文档实现的搜索引擎(二)
github: https://github.com/duchenlong/boost-search-engine
- :根据文档id,得到文档的内容
- :根据文档的内容,得到文档的id
因为boost的官方文档中没有一个搜索的功能,那就可以利用下,为博客系统的搜索功能打一个小基础
那么的模块,就可以在这些官方文档的html文件中的文本来建立
- common:放置公共模块的程序
- data:和表示输入输出内容,表示临时数据
- jieba_dict:jieba分词的词典文件
- parser:预处理模块
- searcher:搜索模块,索引模块
对于使用到的一些库,需要下载一下:
-
:https://github.com/yhirose/cpp-httplib
g++版本必须得是4.9以上 -
:下载地址 https://sourceforge.net/projects/boost/files/boost/1.53.0/
-
:下载地址 http://www.boost.org/doc/libs/1_53_0/doc/html/
-
:https://github.com/yanyiwu/cppjieba
在这个库中,还需要一个,https://gitee.com/mirrors_yanyiwu/limonp?_from=gitee_search,然后放到cppjieba的include目录下就可以了 -
: yum install boost-devel.x86_64
-
: yum install jsoncpp-devel.x86_64
下载之后,对分词进行测试与使用
- 预处理模块
读取指定html文档的内容,解析出其中的文本内容:文档标题,文档URL,文档的正文(p,span,h1…等等这种文本标签中的内容)
然后将解析的关键字的集合,整理到一起,为了之后建立索引打基础
- 索引模块
针对中得到的关键字的集合,对于这些关键字,逐一构造,并提供一些接口给其他函数中方便调用
- 搜索模块
首先,搜索模块中的内容会是一个长文本,得先对个文本进行分词 (分词)
再根据分词的结果,根据倒排索引依次查找所有关键字,得到与这些关键字相关的所有文档 (触发)
之后把所有相关的文档按照一定的规则进行排序,相关性越高的文档排在前面进行显示。(排序)
- 服务器模块
Http服务器,给外部提供服务,使用搭建服务器
首先就是得到boost文档中 .html文件的路径,然后根据这些路径依次对这些文档的内容进行解析(标题,路径URL,正文),最后输出为一个行文本文件
- 枚举boost文档中所有 .html文件路径
这里封装一个函数,直接将所有的路径加入到数组中,执行失败返回
boost::filesystem 中的path类
,该迭代器可以递归的遍历指定路径下的所有文件,在遍历的途中,我们需要跳过目录以及不是.html文件的路径
最后所得到的路径,便是相对于文件的一个相对路径
- 根据路径遍历每个.html文件,对文件内容进行解析
直接遍历vector 数组中的每一个路径,然后依次打开文件,从中进行解析,并对解析函数进行封装
在该函数中,读取文件数据使用公共函数模块中封装的Read接口,然后再分别对标题,路径,正文的解析函数进行封装。
对于解析好的数据,我们进行一个结构体的描述:
- 解析的结果写入到一个输出文件中
同理,对这个函数进行封装
对每一个单独的html文件进行解析后的数据,我们单独写在一行中,并用一个特定的符号进行分割。这个符号不能是正文中存在的,那就可以使用一些不经常使用的字符