C++之基于正倒排索引的Boost搜索引擎项目日志+server代码及详解

首先为了更好的查看自己的项目状况,日志是我们做项目可以说必须要写的一部分。而server部分我们可以理解为写了这么多的类就是为了在这里使用。

1. 日志

__FILE__和__LINE__ 是 C/C++ 编译器预定义的特殊宏:

__FILE__:

它会被编译器自动替换为当前代码所在源文件的路径或文件名(字符串类型)。

在日志函数中,它的作用是记录 "这条日志是从哪个文件输出的"。

例如:如果在 test.cpp 中调用 LOG1 宏,__FILE__ 就会被替换为 "test.cpp"(具体可能包含路径,取决于编译器),最终日志中会显示 [test.cpp : ...]。

__LINE__:

它会被编译器自动替换为当前代码所在的行号(整数类型)。

在日志函数中,它的作用是记录 "这条日志是从文件的哪一行输出的"。

例如:如果 LOG1 宏调用写在 test.cpp 的第 25 行,__LINE__ 就会被替换为 25,最终日志中会显示 [test.cpp : 25]。

然后创建一个log1函数,一个一个打印出外面想要看到的信息。

cpp 复制代码
#pragma once

#include <iostream>
#include <string>
#include <ctime>

#define NORMAL  1
#define WARNING 2
#define DEBUG   3
#define FATAL   4

#define LOG1(LEVEL, MESSAGE) log1(#LEVEL, MESSAGE, __FILE__, __LINE__)

void log1(std::string level, std::string message, std::string file, int line)
{
    std::cout << "[" << level << "]" << "[" << time(nullptr) << "]" 
    << "[" << message << "]" << "[" << file << " : " << line << "]" << std::endl;
}

2.server.cc

"data/raw_html/raw.txt这个路径下存的是我们的数据源,./wwwroot/可以理解为前段网页的代码。

queue是要搜索的关键字,json_string是返回给用户的搜索结果。

接下来就是先实例化一个Searcher类,然后调用InitSearcher函数。这边使用fgets而不用cin是因为cin会忽略空格,而fgets可以整行读取。

bufferstrlen(buffer)-1=0;是因为用户在输入的时候会有换行符,我们要去掉这个。然后把处理后的结果交给query,然后调用Search函数,把经过处理后的结果交给json_string,然后输出。

cpp 复制代码
#include"searcher.hpp"
#include<iostream>
#include<string>
#include<cstdio>

const std::string input="data/raw_html/raw.txt";
const std::string root_path = "./wwwroot";

int main()
{
    ns_searcher::Searcher* search=new ns_searcher::Searcher();
    search->InitSearcher(input);

     std::string query;
     std::string json_string;
     char buffer[1024];
     while(1)
     {
        std::cout<<"Enter Search Query: ";
        //std::cin>>query;
        fgets(buffer,sizeof(buffer)-1,stdin);

        buffer[strlen(buffer)-1]=0;
        query=buffer;
        search->Search(query,&json_string);
        std::cout<<json_string<<std::endl;
     }
    return 0;
}
相关推荐
2601_9622186110 小时前
C++中分配器allocator的实现
开发语言·c++
单片机设计·······10 小时前
【dz-1162】汽车前玻璃雨刮器设计
c++·单片机·嵌入式硬件
AI智讯中枢11 小时前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图
繁华的地方不一定留下你的脚印11 小时前
C++ 算法与 ranges:用 find_if、transform 写清数据处理意图
开发语言·c++·算法
张小姐的猫11 小时前
【AI大模型接入SDK】 —— 前端页面 & 项目总结与拓展
前端·数据结构·数据库·c++·人工智能·chatgpt
AC赳赳老秦11 小时前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
欧特克_Glodon11 小时前
OpenCV计算机视觉开发入门与实践(基于C++):专栏内容介绍及目录
c++·人工智能·opencv·计算机视觉
码匠许师傅12 小时前
【C++三方组件】Asio 下篇:C++20 协程版 TCP 客户端与服务端
c++·tcp/ip·c++20
Y38153266212 小时前
竞品上新监控:用搜索 API 盯住对手发布了什么新功能
python·搜索引擎
一只旭宝12 小时前
【C++复习】四种类型转换 + 常见设计模式 + Redis/MySQL(后端面试复习完整版)
c++·redis·笔记·mysql·设计模式