1: lucene是apache下的一个开源的免费的全文检索工具包(就是一堆jar包)
2: lucene的作用: 就是全文检索的作用
3: Lucene的下载
顺序扫描法:(sql中like使用的就是顺序扫描法)
特点: 从文件头扫描到文件尾,直到扫描到关键词为止
全文检索技术
作用
1: 可以实现类似于百度和谷歌的搜索引擎
2: 可以实现类似于京东,淘宝站内搜索商品的功能
3: 可以实现类似于贴吧,论坛等站内搜索的功能
4: 智能客服
特点
1: 对搜索的关键词进行分词
2: 索引库: 索引目录,所有文档
a: 在添加文档的时候,先对文档进行分词
b: 分的每一个词都会在索引目录中创建唯一索引
c: 每一个词都记录了在哪些文档中出现的次数
3: 相关度排序: 根据关键词在文档中的覆盖程度,关键词在文档中出现的次数进行计算一个权重值,权重值约大排序越靠前
4: 一个词在很多文档中都出现了,说明这个词不重要,只关于这个词的文档会排到最后
文档(Document)中的域(Field)
每个Document可以有多个Field,不同的Document可以有不同的Field,同一个Document可以有相同的Field(域名和域值都相同)
1: 文档的field对象(pojo里面属性)
我们创建每一个域都需要考虑三件事情
a: 是否分词(目的: 是为了创建索引)
b: 是否索引(目的: 是为了查询)
c: 是否存储(目的: 是为了前台使用)
在lucene的代码中,我们能灵活的控制每个域是否进行存储,
但是我们不能灵活的控制,是否分词以及是否索引.
因为lucene在底层已经规定好了每一种域的类型,是否分词以及是否索引
TextField(流以及文本域)
必须分词
必须索引
IntField,DoubleField,LongField,FloatField(数字域)
必须分词(lucene底层对数字域进行了特殊的分词方法)
必须索引
StringField(文本域)
必须不分词
必须索引
StoredField(存储域)
必须不分词
必须不索引
必须存储
2: lucene的维护
lucene在底层没有修改功能,所谓的修改其实是先删除原文档,
然后再增加新文档
3: 相关度排序
Term Frequency (tf): 一个词在一个文档中出现的次数,出现的次数
越多,排序越靠前
Document Frequency (df): 一个词在多少文档中出现的次数,出的次数越多
这个词就越不重要,只跟这个词有关的文档,排序会靠后