search engine demo by golang.
大致可以分为四个部分:搜集、分析、索引、查询。其中,搜集,就是我们常说的利用爬虫爬取网页。分析,主要负责网页内容抽取、分词,构建临时索引,计算 PageRank 值这几部分工作。索引,主要负责通过分析阶段得到的临时索引,构建倒排索引。查询,主要负责响应用户的请求,根据倒排索引获取相关网页,计算网页排名,返回查询结果给用户。
布隆过滤器
爬取到网页之后,将其存储下来,已备后面离线分析、索引之用。
根据HTML语法贵发,过滤标签。用到字符串匹配算法。
临时索引文件(tmp_index.bin)和单词编号文件(term_id.bin)。
通过tmp_index.bin使用多路归并排序,最终得到index.bin。
倒排索引文件(index.bin)和记录单词编号在索引文件中的偏移位置的文件(term_offset.bin)。
当用户在搜索框中,输入某个查询文本的时候,我们先对用户输入的文本进行分词处理。假设分词之后,我们得到 k 个单词。
- 寻找扩展点、痛点(大数据量)
- 改为使用DDD做框架设计
- 爬虫性能优化
- 爬虫数据事物处理
- 支持页面标题,摘要信息和网页快照
- 过程式代码,需优化代码可读性、可维护、可重用
- tmpIndex.bin可能很大,做拆分排序,再聚合生成index.bin
- 优化html过滤,用高效字符串匹配算法bm算法或AC自动机