Lucene(全文检索)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012869196/article/details/83542906

介绍
Lucene是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。
在这里插入图片描述

在这里插入图片描述

A)什么是索引库
索引库是Lucene的一个重要的存储结构,它包括二部份:原始记录表(value),词汇/关健字(key)表,他们都是Map结构。
原始记录表:存放的是原始记录信息,Lucene为其内容分配一个唯一的编号。
词汇/关健字表:存放的是经过分词算法拆分出来的唯一单词和该唯一单词在原始记录表中存在该单词的唯一编号。

1)什么是分词器
采用一种策略/算法,将中英文本中每个字符拆分开来,形成词汇,以待用户输入关健字后搜索
2)为什么要分词器
因为用户输入的搜索的内容是一段文本中的一个关健字,和原始表中的内容有差别,
但做为搜索引擎来讲,又得将相关的内容搜索出来,此时采用分词器来最大限度 匹配原始表中的内容
3)分词器工作流程
》按规则拆分出词汇/关健字
》去除停用词和禁用词
》如果有英文,把英文字母转为小写,即搜索不分大小写

B)为什么要将索引库进行优化
在默认情况下,向索引库中增加一个Document对象时,索引库自动会添加一个扩展名叫*.cfs的二进制文件。
如果向索引库中存Document对象过多,那么*.cfs也会不断增加,同时索引库的容量也会不断增加。

C)合并文件,合并后的文件是二进制压缩字符

》调用API强行合并且压缩文件
indexWriter.addDocument(document);
indexWriter.optimize();注意:只合并与压缩*.cfs文件
indexWriter.close();
》设定合并因子,自动合并文件,默认10个文件合并成一个文件
indexWriter.addDocument(document);
indexWriter.setMergeFactor(50);
indexWriter.close();

搜索结果排序【Sort】
1)影响网站排名的先后的有:参照SEO内部

》title/meta/
》网页的标签整洁
i)标签有开始就有结束
ii)尽采用现在流行的div+css结构,不采用table
iii)得适当缩格
》网页执行速度

如果浏览器加载你的网页时间相对比别人较快时,你的页网比别人排前。以上各种情况都综合影响网页的得分,即百度,Lucene内部有各自的一套算法。

2)Lucene中的显示相关度得分

》scoreDoc.score;

注意:默认情况下,Lucene是按相关度得分排序的,得分高排在前,得分低排在后
如果相关度得分相同,按插入索引库的次序排序

3)Lucene中的设置相关度得分

》document.setBoost(10F);

注意:先设置得分,再添加Document

项目创建
1)创建javaweb工程,取名叫lucene-day01
2)导入lucene相关的jar包
lucene-core-3.0.2.jar【Lucene核心包】
lucene-analyzers-3.0.2.jar【Lucene采用什么分词器算法,默认汉字是一个字一个分词,英文是一个单词一个分词】
lucene-highlighter-3.0.2.jar【Lucene会将搜索出来的字,高亮显示,提示用户】
lucene-memory-3.0.2.jar【索引库优化策略】
3)创建如下包结构
cn.itcast.javaee.lucene.entity
cn.itcast.javaee.lucene.firstapp
cn.itcast.javaee.lucene.secondapp
cn.itcast.javaee.lucene.crud
cn.itcast.javaee.lucene.utils
4)创建TestHelloLucene.java类,编写createIndexDB()和searchIndexDB()二个业务方法

生产中使用
如果要增加多个索引内容进行查询,需要自己创建一个配置表,然后从配置表中读取建索引的信息。
1、先读配置表,哪些表要建索引
2、根据表信息读取该表中中哪些列要建索引
3、接着构造出取实际数据结果集的sql语句
4、根据结果集建索引

猜你喜欢

转载自blog.csdn.net/u012869196/article/details/83542906