项目相关
依法治国信息检索平台
1, 数据采集: scrapy,一直在不停地爬着,抓取各大政府事业单位官方网站(法律条文,最新政策新闻等等。。比较好抓取,基本没有什么反爬虫啥的。。)抓取标题和正文信息。。。
存储到数据库中。。
-
建立倒排索引。
1)gson转成java json对象, 2)ik analyzer进行文本分词,3)建立倒排索引, (索引被放在固定目录下。) (细粒度和智能分词两种分词模式。。)(尽可能少的重建索引,只保留一个索引查询对象。。) -
查询设置
1)设置indexSearcher, 2) 设置分词模式(多种分词模型,一直在严谨,HMM等), 3)设置field 域(相似文本的集合),设置了域之后,就到指定域内去比对,,4)设置查询字符串,也就是关键词。。5)返回结果是一个文档集合。。topDoc。。
基于bm25(概率检索模型)对query和文档相关性进行计算排序。。
BM25
bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法,再用简单的话来描述下bm25算法:我们有一个query和一批文档Ds,现在要计算query和每篇文档D之间的相关性分数,我们的做法是,先对query进行切分,得到单词 q i q_i qi,然后单词的分数由3部分组成:
单词
q
i
q_i
qi和D之间的相关性
单词
q
i
q_i
qi和D之间的相关性
每个单词的权重
最后对于每个单词的分数我们做一个求和,就得到了query和文档之间的分数。
词在文档中相关度、词在查询关键字中的相关度以及词的权重 三个参数。。。
query提示。。自动补全, 需要单独创建自动补全索引库,。。(根据前缀匹配。。)
query纠错:spellCheck, 使用外部索引词库, 利用ngram(对词中字符,匹配较多的), 或者编辑距离, 计算相似度。。 对于句子纠错,也是计算相似度。。
背景
对于规模较大的团队,都会开发自己的搜索引擎,加入各种定制需求、方便优化;对于规模较小的项目或者创业团队,一般都会用一些开源的轮子,比如ElasticSearch、Lucene。
(个人感觉,搜索、推荐、广告算法,三者是商业化时代必不可少的领域,对于创造商业价值具有强有力的推动作用。也是我比较喜欢的想做的领域,通过从事该领域,可以深入了解用户行为习惯,了解客户需求,对于业务需求,可以理解的很透彻。也希望自己可以从事该领域,算是找到自己喜欢感兴趣的方向,希望可以做下去的。。先从自学开始。。。嘻嘻)
并且,只要商业继续快速发展,该领域的算法人才需求也会继续扩大。。。 有很大的前景。。。
搜索:顾名思义,就是搜寻查找,用户输入关键字, 通过相应的算法,查询并返回用户所需要的信息。。
搜索引擎种类
按照功能, 分为垂直搜索 和 综合搜索。。
垂直搜索:主要是针对某一特定领域内的信息进行搜索,比如:淘宝(只搜索商品),爱看图标网(只搜索图片相关)等等。
综合搜索:对众多信息进行综合性的搜索,比如:百度、谷歌、260等搜索引擎,
目前:综合搜索引擎的流量在不停地被各种垂直搜索平台给抢占。。
倒排索引
首先,给每个文档设置编号,然后找出所有的字或词,统计字或词在文档中的出现情况。
根据左图原始文本数据内容, 创建新的倒排索引结构。。
倒排索引如何用:
用户输入查询query时,对query进行分词,会优先通过倒排索引,关键词快速定位到对应的文档id,通过文档id,快速定位到文档内容。。
Lucene
apache开源的全文检索和查询工具,提供了很多强大的api。
在java环境下,可以实现 1)建立全文索引, 2)搜索。
Lucene全文检索:就是对文档中全部内容进行分词,然后对所有单词建立倒排索引的过程。
ElasticSearch
基于Lucene底层api,开发的企业级搜索引擎产品。。
互联网搜索引擎的整体架构
- 信息采集
设计爬虫, 深度优先的方式,依次访问url,抓取该url中的页面内容,可以指定抓取哪些内容。。 将内容保存下来。(保存到本地或者数据库中)。。使用scrapy
实际要考虑的因素: 收集网页要: 信息全面、快速、 稳定、 数据要新颖、质量要高。。
-
信息整理
建索引时要考虑的因素: 效率要高,质量要高, 会给不同关键词索引赋权值,周期性问题, 信息有时效性,建索引过程中的资源消耗问题。。 -
用户查询
要考虑的因素: query分析, 排序, 筛选, 展示方面的问题, 广告, 推荐, 个性化等问题, 数据统计相关问题, query结果返回的时间响应问题。。
整个搜索引擎系统,要考虑的因素还有:容灾问题,不同地区人民搜索时,当地法律问题,国际化问题,反作弊问题, 地域性问题, 垂直搜索问题,移动互联网的问题。。