迷你搜索引擎

本文探讨了在网站访问量增加后,如何通过实现一个简单的搜索引擎来快速查找相关帖子。首先,需要整理现有资源,如遍历HTML目录并提取标题、正文和URL。接着,利用倒排索引技术构建搜索引擎,用户输入关键词后,通过拆分词和权重计算返回搜索结果。点击获取源码查看完整实现。
摘要由CSDN通过智能技术生成

这几天在思考如何对项目做出扩展,当一个网站访问量上升之后随之而来的便是用户的大量交流,根据现在主流的交流方式来看,一般都是一个用户先进行发帖,然后其他用户在下面对之评论,评论系统暂且搁置一边不谈,现在有一个问题就是当帖子数量越来越多,如何快速找到与关键词相对应的帖子,使用关键字在数据库中遍历不太现实,但其实仔细想想搜索引擎不就是做这个的吗,于是就想着实现一个简单的搜索引擎。

要实现一个简单的搜索引擎,必要的相关知识一定是必不可少的,简单来说,第一步先要对已有的资源进行整理,根据整理出来的结果构建索引,搜索模块根据给定关键词查找索引给出排序结果

对已有资源进行整理

搜索引擎使用的前提就是有大量的html文档,需要搜索引擎来做出某种处理来给出正确的结果,所以搜索引擎内部就需要对web杂乱的资源进行管理,以此来完成后面的工作,我们现在假设某一个html目录内有几千条html页面,我们需要对这些页面依次遍历进行统计,将页面中的标题,正文以及html对应在web中的url以某种格式保存下来,这里是保存在一个文件中。

C++提供的库中还不足以让我们拥有遍历整个目录这个功能,所以这里需要借助boost库。

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>

const std::string g_input_path =  "../data/input"; // 待解析的html文档都在这个目录下
const std::string g_output_path = "../data/output/pase_file"; //将解析结果放在这个文件中

struct docInfo {
   
    std::string title;
    std::string url;
    std::string content;
};

bool enumFile(const std::string& input_path, std::vector<std::string>& file_list) {
   
    namespace fs = boost::filesystem;
    fs::path root_path(input_path);
    if(!fs::exists(root_path)) {
   
        std::cout << "input err " << __FILE__ << ":" << __LINE__ << std::endl;
        return false;
    }

    // boost递归遍历目录,借助迭代器
    fs::recursive_directory_iterator end_iter;    
    for(fs::recursive_directory_iterator iter(root_path); iter != end_iter; ++iter) {
   
        if(!fs::is_regular_file(*iter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值