企业内搜索引擎项目(一):架构

一 整体架构

整个搜索引擎网站为一个Web应用平台,采用LAMP架构(Linux + Apache + MySQL + PHP);

(链接:LAMP架构的搭建)

其中PHP负责网站的前端,后端使用C++编写;

服务器后台包括倒排索引模块和搜索模块;

类似于:

二 开源工具的确定

1. Muduo网络库

专注于Linux下的高性能网络库,同时代码量只有5000行,便于学习;

(链接:Muduo的安装和使用)

2. 搜索引擎

xapian -(链接:xapian的使用)

3. 日志系统

log4cpp - (链接:log for C++ Project)

4. 其他

分词工具 - cppjieba

Json - Jsoncpp

三 目录结构

BIN - 存放可执行文件包括indexserver和searchserver;

INC - 头文件

SRC - 源文件

CONF - 配置文件

DATA - 数据 + 索引文件

时间: 2024-11-10 09:40:25

企业内搜索引擎项目(一):架构的相关文章

企业内搜索引擎项目(二):索引的设计和创建

1. 设计 @ 索引创建 采用[动态索引]的策略,可以实现实时搜索的功能: 动态索引的实现需要“倒排索引”,“临时索引”和“已删除文档列表”,其中“倒排索引”存储在磁盘文件中,“临时索引”存储在内存中: 思路: 当系统发现有新文档进入时,立即将其加入临时索引中:有文档被删除时,则将其加入删除文档队列:文档被更改时,则将原先文档放在删除队列,解析更新后的文档内容,并将其加入临时索引中: 用户输入查询请求时,搜索引擎同时从倒排索引和临时索引中读取结果,并将两个结果进行合并,之后用删除文档列表进行过滤

企业内搜索引擎项目(三):搜索服务器框架的搭建

1. 设计 Muduo网络库实战(二)中的"1. 方案的确定" 2. 实战 采用Muduo网络库进行服务器的搭建工作: 思路: 一旦客户端连接服务器成功,调用OnConnection()函数: 当客户端发送数据给服务器,调用OnMessage()函数,处理数据并利用线程池进行搜索返回结果: 其中服务器与客户端的连接采用TCP长连接形式(TCP长连接与短连接的区别),分包方法为在每条消息的头部加一个长度字段: 解析数据的方案:(Muduo中利用Buffer缓存来发送和接收数据库) 当客户

企业内搜索引擎项目(四):搜索功能的实现

1. 思路 在进行网页搜索的过程中,需要考虑索引更好的问题=> 单独使用另一条线程控制磁盘索引的更新,该线程同时更新server.conf配置文件,表明当前正在使用的是哪一个磁盘数据库: 网页搜索的时候根据server.conf中的index信息打开对应的数据库: 2. 实战 利用Xapian开源库进行网页检索操作 (Xapian搜索功能的实现): @ 流程 重新以只读的方式打开磁盘索引文件: 将磁盘索引和内存索引都加入待搜索的索引库searchdb_中: 将客户端传输进来的待查询字符串进行分词

第三章 Java框架整合--企业中的项目架构以及多环境分配

1.业务模块与数据模块分离 在实际开发中,我们项目的架构业务模块和数据模块是分离的,举个例子,假设我们的项目有"人员管理模块"和"酒店管理模块"两个模块,按照上一章的介绍,我们会建立下图所示的项目结构: 其中,人员管理模块的controller.service.dao.mapper都在一个项目中,而在实际使用中,我们会将数据模块分离出来,即将以上两个子模块的service.dao.mapper拿出来,放在一个子项目中,形成如下的项目结构: 注意以下几点: 包的命名最

分享一个大型进销存供应链项目(多层架构、分布式WCF多服务器部署、微软企业库架构)

分享一个大型进销存供应链项目(多层架构.分布式WCF多服务器部署.微软企业库架构) 这是一个比较大型的项目,准备开源了.支持N家门店同时操作.远程WCF+企业库5.0实现. 这块应该算是库存模块中的核心模块了,因为该块的业务逻辑比较多,比较繁琐,大致讲讲业务逻辑吧,大致的逻辑为:出库单/出库单-->填写订单-->出库/入库-->修改库存信息,按照这个顺序来完成入库出库,顺序不能颠倒,同时还要实现订单的删除,修改,在修改库存信息时由于表和表之间有很多的外键关系,所以要同时删除多张表中含有删

一群猪和瞎子, 将企业内现行的组织角色,一对一的对应到 Product Owner

这是张典型的敏捷开发中 Product Owner 的示意图. 这张图往往使人陷入一场争论: 是领域专家,还是架构师, 来担任 Product Owner? 其实, 争论这个问题, 基本上是只考虑了 "敏捷开发中 Product Owner 的定义",而完全忽略了 "产品" 与 "团队成员",实际的现况. 只考虑 "角色":领域专家.架构师:便决定了企业内谁担任 Product Owner, 在实际的项目中,往往会找到错(不适

李新海:你听说过企业内训体系八步走吗?

上周在企业做培训经理的朋友问我,销售公司培训体系如何建立 今天在企业做培训专员的朋友问我, IT科技企业内部培训该如何开展 事实上,这两个问题,都可以用我总结归纳的企业内训体系八步走来解答. 第一步,培训需求调查 第二步,培训计划与预算 第三步,内训师培养与管理 第四步,培训项目管理 第五步,员工培训档案管理 第六步,培训月,季,年总结 第七步,培训机构挑选与使用 第八步,培训评估管理 还记得那是2010年,我刚去万科担任实习生的时候,我直属上级强哥说的一句话,"培训是一个循环,一年循环一次,只

Android应用内社区SDK技术架构浅析

Android应用内社区SDK技术架构浅析 应用内微社区是什么 ? 图1 图2 雪球财经应用内社区 一.以友盟微社区为例 简单来说,友盟的微社区就是一款帮助开发者在应用中快速搭建一个社区( 类似于新浪微博.朋友圈 )的产品.在很多应用中,开发商往往都会需要一个用户之间以及用户与开发商之间互动的社区,用户往往又会在社区里选择赞.评论.关注.转发.发帖等各种互动方式.但是开发一个社交系统可不是那么容易的一件事,复杂的用户关系.消息流.服务器架构等等都是棘手的问题,更重要的是大家都是重复地劳动!每个开

把传统的基于sql的企业信息中心迁移到spark 架构应该考虑的几点思考...[修改中]

把传统的基于sql的企业信息中心迁移到spark 架构应该考虑的几点 * 理由: 赶时髦,  这还不够大条么? > 数据都设计为NO-SQL模式, 只有需要search的才建立2级索引. 就可以了,未必需要rdbms结构. 搜索,和报表可以用spark sql 来进行query. 而且spark提供了内置的mlib和graphX 一般的报表都够用了. > DBA平常有做备份什么的. 那么切换到spark系统后,如何对数据进行备份? > 有没有异地备份的功能?