Lucene简介及倒排索引计算
1.Lucene简介
2000年,由美国搜索界牛人 Doug Cutting在家用每周末2天时间研发的一种搜索引擎工具包.在搜索界,lucene的出现产生了巨大的轰动,导致2000-2010左右红极一时.让全文检索的开发效率极大提升了。和hadoop有剪不清的渊源。
Lucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库
2.Lucene的特点
- 原生语言是java
- 运行时占用栈内存小--不到1MB
- 索引的数据结构占整体索引文件的不到20%(索引数据结构是搜索的关键)
- 创建索引数据速度比较快 150G/h
- 支持丰富的检索功能
- 使用不同的条件数据都可以查到想要的结果
3.索引的概念
索引--index.
读书---目录(索引)
超市---类别牌子
词典---拼音法,偏旁法,难检字法等
图书馆---书号
索引定义:
一批具备顺序的数据结构,形成文件存储在介质中,帮助快速定位到需要的数据.
4.倒排索引计算
4.1名词解释
倒排:
常规的索引使用,一般都是通过id读取数据,搜索到数据具体内容,名字,别名,邮箱
lucene中的倒排索引,是通过内容,名字,邮箱等,查id
例如:文本="中华人民共和国"
字的处理:中,华,人,民,共,和,国
词的处理(最常见,最广泛):中华,华人,人民,中华人民,共和国,人民共和,人民共和国
句的处理:中华人民共和国
每一个计算结果中的字,词,句这个整体文本都是分词计算的词项数据(term)
文档对象(document):lucene中,存在一个整理之后的对象数据(信息单元)叫做document,表示一个数据源中的完整数据(一个网页,一行数据库数据),document最终保存在索引文件里.被查询搜索到后,可以使用这个对象的数据.
域属性(field):文档对象虽然是一个整体数据单元,但是可以由不同的属性构成
例如:
一个网页document:
title标题,address连接地址,content网页内容
一个数据库商品数据document
name,price,num,image等等
4.2倒排索引算法
lucene在收集数据源之后,经过几步计算封装整理能够形成可以被lucene自己搜索的索引文件(索引文件包含了数据的document对象集合)
数据源和document的封装.(域属性封装一个document对象具体属性值)
数据源2个新闻网页:
web1:
文章标题:美国耍赖
文章内容:频繁甩锅,控诉中国疫情信息透露不明确
出版社:新华网
点击次数:58
web2:
文章标题:美国甩锅
文章内容:美国谎称,援助中国1亿美金,中国外交部称从未收到
出版社:新华网
点击次数:66
document封装,定义域属性(根据数据源定义)
文章标题:title
文章内容:content
出版社:publisher
点击次数:click
doc1:
id:uuid/1
title:美国耍赖
content:频繁甩锅,控诉中国疫情信息透露不明确
publisher:新华网
click:58
doc2:
id:uuid/2
title:美国甩锅
content:美国谎称,援助中国1亿美金,中国外交部称从未收到
publisher:新华网
click:66
对document中的文本内容进行分词计算
分词计算词项,经过二进制计算,词项总会携带计算之后的很多参数
例如,词项对应属性,词项出现频率,词项的位移,词项的所在document的id值
doc1:
美国(1),耍赖(1),甩锅(1),中国(1),疫情(1),明确(1),新华网(1),58(1)
doc2:
美国(2),甩锅(2),谎称(2),中国(2),外交部(2),新华网(2),66(2)
doc3:doc4:…docn
合并词项结果和参数-形成倒排索引表
美国(1,2),甩锅(1,2),中国(1,2),新华网(1,2),耍赖(1),谎称(2)
记录形式,以表格方式记录
词项\docid |
doc1 |
doc2 |
doc3 |
doc4 |
.. |
美国 |
1 |
1 |
0 |
0 |
0 |
甩锅 |
1 |
1 |
0 |
0 |
0 |
中国 |
1 |
1 |
0 |
0 |
0 |
新华网 |
1 |
1 |
0 |
0 |
0 |
耍赖 |
1 |
0 |
0 |
0 |
0 |
谎称 |
0 |
1 |
0 |
0 |
0 |
其他 |
0 |
0 |
1 |
1 |
0 |
… |
.. |
.. |
.. |
.. |
.. |
通过读取这个合并表格的数据可以得到对应词项的二进制做搜索计算
例如:查询一个有美国词语,并且有耍赖词语出现的document集合
美国 11000
耍赖 10000
做位的与运算得到结果 美国&耍赖 10000--->同时出现2个词语的文档doc1
最终lucene将所有数据输出到索引文件
两部分组成,
第一部分:海量document对象的集合(搜索到的数据)
第二部分:计算过程出现分词合并结果倒排索引表(搜索手段)