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

比Datasketch好两个数量级?用 Fast Similarity Sketch 优化大规模文本去重(附 C++ 源码)

比datasketch好两个数量级? 用 Fast Similarity Sketch 优化大规模文本去重(附 C++ 源码) 项目地址:https://github.com/pzcddm/FastSketchLSH 论文背景:Fast Similarity Sketching(arXiv:1704.04370v4,FOCS’17 扩展版) 最近在做大规模文本去重时,我们基于 Fast Similarity Sketching 做了一个 Python 去重包 fastsketchlsh,也拿它和 datasketch、rensa 做了对比。 这篇文章主要讲三件事:传统 k-mins 为什么慢,FastSketch 为什么快,以及它和 LSH 搭配后在工程里怎么落地。 先说结论 * 经典 k-mins

By Ne0inhk
【C++指南】vector(一):从入门到详解

【C++指南】vector(一):从入门到详解

.💓 博客主页:倔强的石头的ZEEKLOG主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C++指南》 期待您的关注 文章目录 * 一、默认成员函数 * 1. 默认构造函数 * 2. 元素数量构造函数 * 3. 迭代器范围构造函数 * 4. 初始化列表构造函数(C++11 起) * 5. 拷贝构造函数与赋值运算符 * 二、迭代器相关函数 * 1. 基础迭代器 * 2. 常量迭代器(C++11 起) * 三、容量管理函数 * 1. 容量与大小控制 * 2. 动态调整函数 * `resize(n, val)` vs `resize(n)` * `reserve(n)` vs `shrink_to_

By Ne0inhk
【c++】智能指针(auto_ptr, unique_ptr, shared_ptr, weak_ptr)

【c++】智能指针(auto_ptr, unique_ptr, shared_ptr, weak_ptr)

小编个人主页详情<—请点击 小编个人gitee代码仓库<—请点击 c++系列专栏<—请点击 倘若命中无此运,孤身亦可登昆仑,送给屏幕面前的读者朋友们和小编自己! 目录 * 前言 * 一、为什么需要智能指针 * 二、智能指针 * RAII * 像指针一样使用 * 三、auto_ptr * 概念讲解 * 模拟实现 * 测试 * 四、unique_ptr * 概念讲解 * 模拟实现 * 测试 * 五、shared_ptr * 概念讲解 * 模拟实现 * 测试 * 六、shared_ptr的循环引用 * 场景引入 * 如何解决循环引用问题 * 七、weak_ptr * 概念讲解 * 模拟实现 * 测试

By Ne0inhk

c++ vector 使用find查找指定元素方法

在 C++ 中,std::vector 是一个动态数组,用于存储同类型元素的序列。如果你想在 std::vector 中查找指定元素,可以使用 std::find 算法。std::find 是定义在 <algorithm> 头文件中的标准库函数。 以下是一个示例代码,展示了如何使用 std::find 在 std::vector 中查找指定元素: #include<iostream>#include<vector>#include<algorithm>// 包含 std::findintmain(){// 创建一个 vector 并初始化一些元素 std::vector&

By Ne0inhk