跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 基于正倒排索引的搜索引擎日志与 Server 代码

C++ 项目日志宏实现与搜索引擎服务端基础代码。展示如何利用 __FILE__ 和 __LINE__ 预定义宏记录日志来源文件及行号,封装 log1 函数支持不同日志等级。服务端主程序演示初始化 Searcher 类,使用 fgets 替代 cin 处理含空格的用户查询输入,去除换行符后调用搜索接口并输出 JSON 格式结果。涵盖日志模块构建与简单 Web 服务交互流程。

性能调优发布于 2026/3/23更新于 2026/9/1057 浏览
C++ 基于正倒排索引的搜索引擎日志与 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 函数,打印所需信息。

#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 可整行读取。

buffer[strlen(buffer)-1]=0 用于去除用户输入末尾的换行符。将处理后的结果交给 query,调用 Search 函数,将结果存入 json_string 并输出。

#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;
}

目录

  1. 1. 日志
  2. 2. server.cc

更多推荐文章

查看全部
  • 论文解读:Attention Is All You Need 与 Transformer 架构详解
  • Spring 配置文件加载路径:classpath、file、URL 与 Web 容器
  • C++ 运算符重载:自定义类型的运算扩展
  • OpenCode 开源 AI 编程代理实战与配置
  • 多模态动态融合模型 PDF:理论解读、代码修复与参数详解
  • 芋道项目部署:前端直连后端与 Nginx 反向代理对比
  • Linux 文件系统核心:磁盘 CHS/LBA 寻址与 inode 基础
  • 谷歌 Gemini API 快速入门与 LangChain 调用指南
  • gpt-oss-20b 本地 WebUI 部署与网页推理服务配置
  • 前端三年后,我辞职去韩国读了个CS硕士
  • 豆包 Seedream 4.0 多图融合实战测评:主体一致性与生成效率解析
  • 基于 Leaflet 和天地图的免费运动场所 WebGIS 可视化 - 以长沙市为例
  • ROS2 基础:从零理解 URDF 机器人模型描述格式
  • Python 3.14 在 Windows 上的安装指南
  • 用 Python 实现会追着食物跑的 AI 贪吃蛇
  • Claude Code 与 OpenClaw 实战指南:从初始化到自动化工作流
  • Gemini 3 编程能力深度评测:从代码补全到架构级理解
  • MySQL 字符集配置与修改实战指南
  • 网络安全常用工具汇总:从漏洞扫描到渗透测试实战指南
  • 程序员与管理者进阶必读的 5 本经典好书

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online