题外话:输出是最好的学习手段
知识不是信息,学习不是记忆。知识可以说是一种对一系列问题的解决模型或者算法。学习是理清问题和答案之间的关系,得到的就是知识。参加课程、阅读就是获得信息或者例子,学习就是通过这些信息例子思考后整理出知识,而输出文章就是一种很好的整理归纳。
正文:
搜索技术现在非常成熟,业界的开源工具,算法论文都很容易获取,前一段时间参加公司的课程《视频搜索技术栈解析》又系统的捋了一遍,做一个简单的搜索系统并不难,但是要做一个高效,高质量的搜索结果还是很复杂的。
下面的思维导图主要的流程为参加学习的课程脉络来整理,有一些自己的调整,其中有些部分也没有展开,因为篇幅限制同时自觉能力自觉驾驭不了深挖的部分,例如搜索内容排序权重部分,对检索结果根据用户行为(搜索,点击率,转化率)这些可以深挖的部分以及机器学习部分 都是知其然而不知其所以然。不敢妄言,希望以后有机会深入学习实践与君共勉
搜索主流程
爬虫-》数据抽取-》搜索引擎-》智能提示-》Query分析-》召回&排序-》交互呈现
下面是思维导图正文:可以下载下来用工具查看,或者单独查看图片
其中有些点例如算法部分、分布式数据存储、用户行为分析可以挖的很深,也比较难,后台开发个人感觉对整体的架构有一个较为清晰的认识已可以。
在写技术小结的时候有几个困惑
1:有些知识明显的大家都知道,或者大部分人都知道,例如搜索中分词跟倒排索引,基本搜索相关文章必带的所以就更不好意思展开来写,毕竟珠玉在前。直接Google 或者 Wiki百科就能找到全面详细的文章。
2:有些需要深挖的例如:分布式存储(存储纬度[关键词|文档]、更新策略、热点数据)、分布式检索后有序集合结果返回交集还是并集(内存bitmap、跳表)、检索返回后业务策略规则(敏感词、推荐、合作)等单篇展开篇幅可能都不够的,只能先声明一下那里有座山(还未攀登征服过)、然后就留在身后不知何时想起
3:小结下由点到面,还是由面到点,内容核心不好确认,如果只是发表一段代码例如一个function,点太小。如果直接上来整体架构就太空泛。
所以就想到哪里写到哪里了,关于搜索的整体流程基本可以再上面的思维导图里面,具体的单点的模块如果了解就当跳过,如果不了解不熟悉就抽时间了解下、查漏补缺。