后端程序员之路 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, filters);
    - get_item _forward_index.get_item
- 持有InvertedIndex _inverted_index;
    - _inverted_index.build_iindex( _forward_index.get_forword_index() );
    - search _inverted_index.trigger(docid_result, working_vect, docid_set, user_profile, search_params);

# ForwardIndex 正排索引(正向索引)
- 持有boost::unordered_map<uint64_t, ITEM> _id2docitem
- 持有boost::unordered_map<uint64_t, filter_t> _id2filter;
- 持有boost::unordered_map<uint64_t, bool> _blacklist;
- build_findex
    - 已删除的文章从_id2docitem、_id2filter删除,加入到_blacklist
    - 更新黑名单,把已更新的文章从_blacklist删除
    - 已过期文章加入_blacklist,从_id2docitem、_id2filter删除
    - 加入新文章或者更新后的文章到_id2docitem、_id2filter
- get_all_items 返回_id2docitem的数据
- get_item 返回_id2docitem.find
- get_items 处理filters,然后_id2docitem.find
- filter_ids 根据FilterJudge和search_params_t对文章进行过滤

# InvertedIndex 倒排索引(反向索引)
- boost::unordered_map<uint64_t, docid_vect_t > inverted_index_t; 从key到文章数组的映射
- std::vector<inverted_index_t> multi_inverted_index_t; 多个从key到文章数组的映射
- 内置
- build_iindex
    - 建立category、keyword、topic、ventity等到docid的索引
    - 对数据的vector根据打分进行排序
- trigger
    - 构造working_vect,用于整个流程放置文章集
    - 进行一系列的trigger_by_features
        - 从一系列特征找到一系列文章vect
        - 找到的文章进行union_insert,合并到working_vect
    - 进行一系列的trigger_or_keys
        - 基本同trigger_by_features
    - 对working_vect里的文章进行check_intersection,即匹配更多and/no操作,得到最终docid_vect

时间: 2024-08-01 10:46:50

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

后端程序员之路 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_ju

后端程序员之路 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