后端程序员之路 34、Index搜索引擎实现分析3-对文章索引的两层分块

# part_indexer 对文章根据id的hash进行分块索引
- 持有 search_index _inc_index[2]; search_index _history_index[2]; 进行实际的搜索操作
- get_size 调用search_index的search
- get_all_items 调用search_index的get_all_items
- search 根据条件获取一批文章
    - 传入user_profile_t、search_params_t、filter_judge用于搜索
    - 传入p_scoring用于打分,当搜索结果多于search_params._count时根据scores取前面的文章
- get_item
    - 传入doc_id,调用search_index的get_item获取文章
    - 执行search_index.get_forward_index_ptr()->filter_ids()

# search_index 对文章根据语言、地域、类型进行分块索引
- 持有 index_box _index_box; IndexBoxes _index_boxes;
    - get_items _index_box.get_items(docid_vect, result, filters)
    - get_all_items _index_box.get_all_items
- 持有 std::map<std::string, uint32_t> _language_pool,_region_pool,_type_pool
- inc_data、insert_doc 添加文章
    - 区分文章的LANGUAGE、REGION、TYPE,拼成字符串进行hash作为key
    - _index_boxes[key].insert_doc(doc); 或者 _index_boxes.insert({key, box});
    - _index_box.insert_doc(doc);
- search
    - generate_keylist search_params->keylist
    - foreach cit in keylist
        - fit = _index_boxes.find( *cit );
        - fit._inverted_index.trigger

时间: 2024-10-09 00:34:29

后端程序员之路 34、Index搜索引擎实现分析3-对文章索引的两层分块的相关文章

后端程序员之路 35、Index搜索引擎实现分析4-最终的正排索引与倒排索引

# index_box 提供搜索功能的实现- 持有std::vector<ITEM> _buffer; 存储所有文章信息- 持有ForwardIndex _forward_index;    - _forward_index.build_findex( _buffer )    - get_all_items _forward_index.get_all_items    - get_items _forward_index.get_items(docid_vect, result, filt

后端程序员之路 47、Hadoop hdfs

Hadoop的核心是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用,Hadoop旗下有很多经典子项目,比如HBase.Hive等,这些都是基于HDFS和MapReduce发展出来的.Hadoop Distributed File System,简称HDFS,是一个分布式文件系统.MapReduce是一套从海量源数据提取分析元素最后返回结果集的编程模型.Hadoop典型应用有:搜索.日志处理.推荐系统.数据分析.视频图像分析.数据保存等. 什么是HDFS及HDFS架构设

后端程序员之路 40、Pthreads

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准.线程这个东西在操作系统原理里讲得比较清楚了,再加上对windows那一套进程线程的东西比较清楚,所以这里还是很多可以直接类比学习的. # 基本结构和概念- pthread_t:线程ID,可以基本认为和windows一样是个DWORD- pthread_attr_t:线程属性,主要包括scope属性.detach属性.堆栈地址.堆栈大小.优先级等- pthread_mutex_t, 互斥体 # 线程操作函数

后端程序员之路 39、一个Protocol Buffer实例

实际工作的Protocol Buffer使用经验 # 写proto文件- 协议版本 项目用的是protobuf2,所以要指定 syntax = "proto2";- 包名 package xxx_yyy;- 优化选项 option optimize_for=LITE_RUNTIME;- 导入其它依赖的proto import "typea.proto";- message定义    - required定义必选    - repeated定义重复项,底层实现一般是l

后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法,是最简单的机器学习算法之一.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.该算法的功能有:从目标区域抽样计算欧式或马氏距离:在交叉验证后的RMSE基础上选择启发式最优的K邻域:计算多元k-最近邻居的距离倒数加权平均. 机器学习(一)——K-近邻(KNN)算法 - oYabea - 博客园http://www.cnblo

后端程序员之路 38、Scala入门

Scala 是 Scalable Language 的简写,是一门多范式的编程语言. 语言特性:1.面向对象,所有值都是对象,类可以继承和组合:2.函数式,支持闭包,支持柯里化等等:3.静态类型,支持泛型,支持模式匹配:4.支持Actor并发模型,使用Akka实现. 和c++/java相比,有意思的特性:1.Trait 特征,不是c++的萃取相当于接口,但是可以定义属性和方法,相当于c++的非纯虚函数接口声明类 2.模式匹配函数式语言的标配了,x match {},case a => b,匹配x

后端程序员之路 26、CAP理论

可能是CAP理论的最好解释 - 西代零零发 - 博客频道 - CSDN.NEThttp://blog.csdn.net/dc_726/article/details/42784237 CAP理论 - ThinkDiff - 博客园http://www.cnblogs.com/bodhitree/p/5779213.html CAP理论 - 老码农的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/chen77716/article/details/30635543

后端程序员之路 3、fastcgi、fastcgi++

CGI与FastCGI - wanghetao - 博客园http://www.cnblogs.com/wanghetao/p/3934350.html eddic/fastcgipp: A C++ FastCGI and Web development platform:https://github.com/eddic/fastcgipp fastcgi++: Main Pagehttp://isatec.ca/fastcgipp/ 分布式(1):nginx+spawn-fcgi+fchi +

后端程序员之路 2、nginx、php

nginx是由俄罗斯人开发的一种实现web服务器的工具,主要是为俄罗斯的第三大门户网站实现反向代理加速的服务器. Linux(CentOS)下,下载安装Nginx并配置 - jtlgb - 博客园http://www.cnblogs.com/jtlgb/p/5809808.html 也可以配置源,然后直接yum install nginx Nginx开发从入门到精通 — Nginx开发从入门到精通http://tengine.taobao.org/book/ 针对Nginx的PHP安装和针对ap