1.采用workflow架构,使用workflow搭建一个http服务器,用于接收客户端的请求 2.对客户端发送的url进行解析,/search为网页查询服务,/get为推荐字服务 3.推荐字服务模块分为离线部分和在线部分,离线部分将语料文件进行清洗、去重以及停用词过滤,生成中文和英文词典,根据中英文词典生成词典索引文件,在线部分对客户端发送的报文体进行解析,根据每一个字符得到候选词集合,将候选词集合根据最小编辑距离算法由小到大排序,再根据词频大小进行排序,返回客户端前十个候选词 4.网页查询服务模块分为离线部分和在线部分,离线部分将爬虫下来的网页使用tinyxml进行解析,使用simhash算法计算每个网页的指纹并进行去重,生成网页库和网页偏移库,将去重后的网页的内容进行解析、过滤停用词后得到字符对于每一篇网页的权重,生成倒排索引文件,在线部分服务器将客户端请求的报文体进行解析,将客户端查询内容作为文章,过滤停用词后,计算非停用词的权重作为基准向量和网页库的每一篇文章进行余弦相似度的计算,按照相似度大到小排序,返回给客户端前十个相似的网页连接 5.网页查询服务需要对磁盘文件进行频繁读写,影响查询速度,引入redis和LRU作为缓存进行优化,分别为redis_server和LRUCache 6.redis作为缓存系统时,客户端发送网页查询服务的请求后,服务器将产生一个redis任务,到redis中查询是否存在键值对,如果没有则使用网页偏移库读写磁盘得到网页链接发送给客户端,并且更新查询内容和网页链接到redis中 7.LRU作为缓存系统时,使用了workflow的资源池接口,将LRU资源放入资源池中,当服务器创建网页查询服务时,会从资源池中获取LRU资源,先进入LRU查询是否有缓存,如果没有则进行磁盘文件的读写并且更新LRU中的缓存 8.使用workflow资源池和LRU缓存系统时,由于每个线程拿到的LRU不一样,导致资源池中的缓存内容不一致,创建一个定时器任务,每隔30s将资源池中所有的LRU进行同步声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论