lucene全文检索概述(一)
目录
5.将分词结果输出到索引文件,将document数据输出到索引文件;
一.介绍
随着数据的快速增长,对数据的检索功能有了越来越高的要求
快,准,最早期涉及到全文检索技术的互联网企业只有搜索公司.对视频,图片,文本信息,全部整理成索引文件,利用索引的特点(有序,结构,存储在磁盘,快速定位,文件)实现丰富查询功能的技术;
二.背景概括
2.1数据猛增,举例2014年数据
- youtube-一分钟上传400-500小时视频
- 苹果用户-每分钟下载51000应用
- 亚马逊-一分钟平均交易额22万美元
- Siri-一分钟回答错误10万个问题;
- 谷歌:一分钟搜索词条次数亿次
需要准确度高,速度要快,数据量支持庞大的内容的技术实现搜索的单独处理-全文检索技术;
2.2传统检索方式:内存检索,硬盘数据库检索
1.内存检索:文档检索
windows将打开的文档加载到内存,是在内存已经加载的内容中搜索;
快/准,数据量太小;(redis技术集群的内容容量也不能达标)
2.硬盘数据库检索:
利用索引的优化,对数据库创建海量表格处理不同类型数据,
数量大/准,慢,无法应对多功能的搜索; like关键字没有使用索引;
三.检索系统结构
互联网公司中(美团,阿里,京东,腾讯,百度,谷歌,facebook,亚马逊,网易,等等),检索功能全部使用的都是全文检索技术; 配合大数据技术读取元数据文件,配合前端技术完成检索后的数据使用;
一.在一套检索系统中包含主题的三个部分
1.信息的原始采集:
原始数据可以在数据库,也可以在日志,也可以在大数据存储分布式系统中,将原有数据获取保存.
2.信息的有效整理:
原始数据非结构化,在采集系统中将原始数据进行分类整理(索引的创建),形成全文检索技术的索引文件;
3.信息的搜索系统:
利用前端的系统(服务),给客户使用,从全文检索技术中获取客户端查询搜索的数据返回;
4.结构图(百度)
5.结构图(京东)
6.全文检索技术的应用位置:
- 从原始数据整理成索引文件,需要全文检索技术
- 从索引文件中保存的数据搜索,需要全文检索技术7
围绕着索引文件运转的一种搜索技术;
四.全文检索技术
1.倒排索引算法-创建索引(百度网页)
全文检索技术中心,想要将有结构的非结构化的海量数据整理成可用的索引文件,需要一种算法完成,常见的就是倒排索引算法;
1.原始数据多个网页
网页1:
标题:看看美国怎么死
内容:中国与美国之间的贸易战到底会造成多少影响?
时间:2019/5/15
出版社:新华社
网页2:
商品名称:三星固态硬盘
商品价钱:2000元
商品描述:最新产品,不受中美贸易战影响的全新商品
卖家信息:猫猫店铺
网页3:
标题:美国要作死
内容:中国不惧美国挑衅
时间:2019/5/16
出版社:新华社
2.将原始数据封装成对应的全文检索对象(document)
document1(网页1)
title:看看美国怎么死
content:中国与美国之间的贸易战到底会造成多少影响?
time:2019/5/15
publisher:新华社
document2(网页2)
product_name:三星固态硬盘
product_price:2000元
product_desc:最新产品,不受中美贸易战影响的全新商品
shop_info:猫猫店铺
document3(网页3)
title:美国要作死
content:中国不惧美国挑衅
time:2019/5/16
publisher:新华社
在封装document时,根据业务需求的需要会从原始数据中剔除一些根本不可能会用来搜索的数据
3.将document进行数据的分词计算
分词:原始数据,所有的字符串,根据分词的逻辑计算成最小意义的词语的过程--分词计算,例如
中国不惧美国挑衅--{中国},{不惧},{美国},{挑衅}
中华人民共和国--{中华},{中华人},{华人},{人民},{人民共和}
对于以上3个document计算的分词结果,会以分词结构存储下来
document1(id=1){
title:{看看(1,出现频率,偏移量,位置等等)},{美国(1)},{怎么死(1)}
content:{中国(1)},{美国(1)},{贸易(1)},{影响(1)}
publisher:{新华社(1)}
}
ducument2(id=2){
product_name:{三星(2)},{硬盘(2)}
product_price:{2000(2)},{2000元(2)}
shop_info:{猫猫(2)},{店铺(2)}
}
document3(id=3){
title:{美国(3)},{作死(3)}
content:{中国(3)},{不惧(3)},{美国(3)},{挑衅(3)}
publisher:{新华社(1)}
}
4.分词的整合,整合索引的数据结构
document1,2,3中有属性名称,和分词结果完全一样的分词
美国([1,3],[title,content])
中国([1,3],[content])
新华社([1,3],[publisher])
三星([2],[product_name])
5.将分词结果输出到索引文件,将document数据输出到索引文件;
2.倒排索引算法-搜索索引
客户端传递的参数是"美国",可以利用全文检索创建的索引文件,从分词中立刻定位到"美国",([1,3],[title,content]),直接利用id定位到美国词出现在的所有document对象
搜索"xx" 返回List<Document>
- "中国与美国的贸易战"==分词逻辑的计算(可以做分页查询)
- 中国--一批document
- 美国--一批document
- 贸易--一批document
- 交集,并集,差集
五.lucene全文检索引擎包
1介绍
创始人,Doug Cutting(狗哥),lucene的创始人,也是hadoop的创始人,lucene,开源的全文检索引擎工具包;极大的简化的全文检索引擎的开发效率(源生创建语言java);
2特点
1.索引的数据速度
150G/h(每小时可以从元数据中创建出索引文件的大小)
对lucene运行时栈内存的使用1MB
2全量索引
(第一次创建索引)速度和增量索引(数据的变化创建索引)类似;
3.提供丰富的基于索引结构的搜索功能
- 词项查询(是所有查询的基础)
- 多域查询(多个属性title,content同时查询)
- 布尔查询(多个查询条件的逻辑关系结果)
- 范围查询(对数字特性的数据,价钱,点击量,内存大小,硬盘大小)
- 模糊查询(数据不确定时,使用的范围匹配)
- 通配查询
3.了解的全文检索的概念
1.Query:
搜索时,使用用来封装查询条件的对象,不同的查询功能,实现类是不一样,TermQuery,MultiFieldQuery,BooleanQuery;
2.document:
文档对象,一个文档对象对应数据的一个基本单位:一个商品,一个用户,一个订单,一个物流单子,相当于一个数据库表格中的一行数据
3..field:
域属性,每一个document中绑定使用的属性内容,根据原始数据定义这些域属性的值,或者类型.
4.Term:
词项,分词计算的结果中每一个词语都可以成为全文检索中一个词项信息. 中华人民--{中华}{人民}