lucene学习总结1
lucene的原理、索引概要过程
lucene是一个全文搜索框架。
数据库也能搜索,为什么要用lucene?主要是因为速度快。
lucene采用倒排的方式进行索引。
倒排的原理:
将信息分割成一个个关键词,并附以该关键词的位置。
关键词--位置之间形成一个对应关系。
n个关键词--位置,就形成一个索引表。
搜索时,通过查找索引表中的关键字。就能迅速找出所在位置。
关键词的数量会随索引信息的量而增长,但到了一定程度,表的增长就会很少。
(1GB信息,关键词表大约为5MB)
lucene实际上只有两个功能--索引、搜索。
索引:给它提供一堆字符串,让它建立索引。
搜索:提供关键词,让lucene定位所在的位置。
lucene以文档为单位进行索引。
主要层次结构如下:
Field->Document->IndexWriter->Directory
Field是可搜索数据的最小单位。
Field有多个构造函数,但本质上就是一个name-value,加以上3个属性的组合。
1.索引方式
ANAYLZED索引、分词
ANAYLZED_NO_NORMS
NO不索引
NOT_ANAYLZED索引、不分词
NOT_ANAYLZED_NO_NORMS
2.是否存储(YES,NO)
3.TermVector
属性怎么组合?以图书索引为例子:
书号:索引、存储、不分词
书名索引、存储、分词
作者索引、存储、不分词
出版日期:不索引、存储、不分词
摘要:索引、不存储、分词
价格:不索引、存储、不分词
原则就是:能给用户搜索字段的就索引、需要在搜索结果显示出来就存储、允许模糊匹配的就分词。
Document:文档是索引和搜索的单元,由多个Field组成。
IndexWriter;创建、维护索引,以Document为单位进行操作。
IndexWriter的构造方法主要有2个参数:
1.Directory
抽象的目录,用于存放索引
2.Analyzer
字符串解析器(说白了就是分词器)
IndexWriter的工作就是:
1.首先使用Anaylzer对Document中标记为“分词”的Field
2.把所有Document的Field进行索引,并写到目录