孤傲苍狗

导航

 

① 什么是全文检索

1.数据的分类
1)结构化数据
格式固定,长度固定,数据类型固定。
例如数据库中的数据
2)非结构化数据
word文档,pdf文档,邮件,html
格式不固定,长度不固定,数据类型不固定

 


2.数据的查询


1)结构化数据的查询

sql语句,查询结构化数据的方法,简单,速度快

 

2)非结构化数据的查询

从文本文档中找出包含spring单词的文件

1 目测(坑爹呢)
2使用程序把文档读取到内存中,然后匹配字符串,顺序扫描
3 把非结构化数据变成结构化数据
先根据空格进行字符串拆分,得到一个单词列表,基于单词列表创建一个索引
然后查询索引,根据单词和文档的对应关系找到文档列表,这个过程就叫做全文检索,

索引;一个为了提高查询速度 创建某种数据结构的集合。

 

3.全文检索
先创建索引然后查询索引的过程就叫做全文检索,
索引一次创建可以多次使用,表现为每次查询速度很快,

② 全文检索的应用场景

1.搜索引擎
百度,360搜索,谷歌,搜狗

2.站内搜索
论坛搜索.微博,文章搜索

3.电商搜索

淘宝搜索,京东搜索
4. 只要是有搜索的地方,就可以使用全文检索技术


三丶 什么是lucene

lucene是一个局域java开发全文检索工具包

四丶 lucene实现全文检索的流程,

1 创建索引
1)获得文档,
原始文档,要基于那些数据来进行搜索,那么这些数据就是原始文档
搜索引擎;使用爬虫获得原始文档,
站内搜索:数据库中的数据
案例:直接使用io流读取磁盘上的文件

2)构建文档对象
对应每个原始文档创建一个document对象
每个document对象中包含多个域 (filed)
域中保存的就是原始文档数据
域的名称
域的值
每个文档都是有一个唯一的编号,就是文档id
3)分析文档
就是分词的过程
1.根据空格进行字符串拆分,的到一个单词列表
2.把单词统一转换成小写
3.去除标点符号
4.去除停用词
停用词:无意义的词
每个关键词都封装成一个term对象中
term中包含两部分内容;
关键词所在的域
关键词本身
不同的域中拆分出来的相同的关键词是不同的term

4)创建索引
基于关键词列表创建一个索引,保存到索引库中
索引库中:
索引
document对象
关键词和文档的对应关系
通过词语找文档, 这种索引的结构胶倒排索引结构


2.查询索引
1) 用户查询接口
用户输入查询条件的地方
例如:百度的搜索框
2)把关键词封装成一个查询对象
要查询的域
要搜索的关键词
3)执行查询
根据要查询的关键词到对应的域上进行搜索
4)渲染结果
根据文档的id找到文档对象
对关键词的进行高亮显示
分页显示
最终展示给用户

 

posted on 2018-11-13 11:29  孤傲苍狗  阅读(99)  评论(0)    收藏  举报