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

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函数,一个一个打印出外面想要看到的信息。

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

Read more

自己调用自己的算法——递归算法

自己调用自己的算法——递归算法

目录 1. 什么是递归 2.具体例题讲解 2.1 LeetCode面试题 08.06. 汉诺塔问题 2.2 LeetCode21. 合并两个有序链表 2.3 LeetCode206. 反转链表 2.4 LeetCode50. Pow(x, n) 3. 总结 今天我们来聊一聊递归算法。 1. 什么是递归 相信各位在学习计算机的过程中都是听说过递归,它的本质就是通过自己调用自己的方式来实现一些问题。 它的代码一般来说是比较简单,那么我们该怎么设计递归呢,或者说什么样的问题是可以使用递归的呢? 在递归的设计中我们都需要以下这几步: 1. 确定问题是可以被分成多个重复子问题的。并且这些⼦问题具有与原问题相同的解决方法。 2. 把这些子问题的共同点确定出来,并从宏观的角度去看待这些问题。 3. 构建函数头,这个函数头表示的是什么,解决的是什么问题。 4. 接着去思考递归的出口。 PS:

By Ne0inhk
中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南

中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南

目录 * 背景‌ * 一、环境规划与依赖准备‌ * 1. 服务器规划(3节点集群) * 2. 系统与依赖‌ * 3. Hadoop生态组件版本与下载路径 * 4. 架构图 * 二、Hadoop(HDFS+YARN)安装与配置‌ * 1. 下载与解压(所有节点) * 2. HDFS高可用配置 * 3. YARN资源配置‌ * 4. 启动Hadoop集群 * 三、MySQL安装与Hive元数据配置‌ * 1. 安装MySQL(Master节点) * 2. Hive配置连接MySQL * 3. 初始化Hive元数据 * 四、Sqoop安装与数据迁移实战‌ * 1. 下载与配置(Master节点) * 2. 配置环境变量 * 五、Azkaban工作流调度系统部署‌ * 1. 安装Azkaban(Master和Worker1节点) * 2. 配置Azkaban‌

By Ne0inhk
数据结构—顺序表链表超经典算法

数据结构—顺序表链表超经典算法

数据结构—顺序表链表经常用到的算法 * 所有题目链接 * 顺序表算法题(双指针法) * 移除元素 * 删除有序数组中的重复项 * 合并两个有序数组 * 链表算法题(快慢指针,三指针法,创建新链表法) * 移除链表元素 * 反转链表 * 链表的中间节点 * 合并两个有序链表 * 链表分割 * 链表的回文结构 * 相交链表 * 环形链表(快慢指针) * 环形链表I * 环形链表II * 代码仓库 所有题目链接 移除元素 删除有序数组中的重复项 合并两个有序数组 移除链表元素 反转链表 链表的中间节点 合并两个有序链表 链表分割 链表的回文结构 相交链表 环形链表I 环形链表II 顺序表算法题(双指针法) 移除元素 题目链接↓ 移除元素 题目讲解↓ 思路:双指针法,创建两个变量dst,src如果src指向的数据是val,src++如果src指向的数据不是val,赋值(

By Ne0inhk