Skip to content

gvzhang/ruizi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ruizi

search engine demo by golang.

搜索引擎

大致可以分为四个部分:搜集、分析、索引、查询。其中,搜集,就是我们常说的利用爬虫爬取网页。分析,主要负责网页内容抽取、分词,构建临时索引,计算 PageRank 值这几部分工作。索引,主要负责通过分析阶段得到的临时索引,构建倒排索引。查询,主要负责响应用户的请求,根据倒排索引获取相关网页,计算网页排名,返回查询结果给用户。

搜集

待爬取网页链接文件:links.bin

网页判重文件:bloom_filter.bin

布隆过滤器

原始网页存储文件:doc.bin

爬取到网页之后,将其存储下来,已备后面离线分析、索引之用。

网页链接及其编号的对应文件:doc_id.bin

分析

抽取网页文本信息

根据HTML语法贵发,过滤标签。用到字符串匹配算法。

分词并创建临时索引

临时索引文件(tmp_index.bin)和单词编号文件(term_id.bin)。

索引

通过tmp_index.bin使用多路归并排序,最终得到index.bin。

倒排索引文件(index.bin)和记录单词编号在索引文件中的偏移位置的文件(term_offset.bin)。

查询

当用户在搜索框中,输入某个查询文本的时候,我们先对用户输入的文本进行分词处理。假设分词之后,我们得到 k 个单词。

todolist

  • 寻找扩展点、痛点(大数据量)
  • 改为使用DDD做框架设计
  • 爬虫性能优化
  • 爬虫数据事物处理
  • 支持页面标题,摘要信息和网页快照
  • 过程式代码,需优化代码可读性、可维护、可重用
  • tmpIndex.bin可能很大,做拆分排序,再聚合生成index.bin
  • 优化html过滤,用高效字符串匹配算法bm算法或AC自动机

reference

About

search engine demo by golang.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published