luncene(汤阳光)

1. Eclipse 中实用快捷键  
alt+ 内容提示 == 如:syso 按此快捷键之后生成 System.out.println();
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加) -- 经常会使用到的
ctrl+shift+o 批量导入需要的类、接口之类的,比较常用
ctrl+1 错误帮助,一般用此快捷键创建某个方法
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Ctrl+Shift+F 格式化当前代码,关于格式化的配置大家应该都知道在哪配吧

2.什么是信息检索,什么是全文检 索?  
信息检索就是从信息集合中找出与用户需求相关的信息。被检索的信息除了文本外,还有图像、音频、视频等多媒体信息,我们只关注文本的检索。把用户的查询请 求和全文中的每一个词进行比较,不考虑查询请求与文本语义上的匹配,这叫做全文检索。在信息检索工具中,全文检索是最具通用性和实用性的。
在这里我们要特别注意两个地方,只关注文本,不考虑语义。

3.为什么我们不用 SQL 语句来实现功能呢?  
数据库的搜索不能实现我们的全文检索的要求,主要是匹配效果:如搜索ant,在sql中使用like ‘%ant%’会搜索出planting,但他不应出现。查出的结果没有相关度排序,不知道有用的结果在哪一页。搜索速度太慢,达不到毫秒级的要求。其实 在 Lucene 没有出现之前我们是使用在数据库中建一个 keyword 的表来实现这个功能的.不过使用起来和维护都很麻烦.

4.Lucene  
Lucene是一个高性能、可伸缩的全文检索工具包。可以使用他为你的应用程序添加索引和搜索能力。Lucene的作者Doug Cutting是资深的全文检索专家。最初,Lucene以开源的形式出现在SourceForget上。2001年,Lucene加入了Apache旗 下的Jakarta项目。2005年,Lucene正式脱离Jakarta成为Apache旗下的顶级项目。现在,Lucene的主页 为:http://lucene.apache.org/。有很多应用程序使用Lucene来提供全文检索的功能,如我们经常使用的Eclipse的帮助 子系统,就是使用Lucene实现的。(在第一次使用的时候,会有一个进度条,那是在创建索引)。

5.添加Lucene环境.  
添加 jar包
lucene-core-2.4.0.jar(核心);
contrib/analyzers/lucene- analyzers-2.4.0.jar(分词器);
contrib/highlighter/lucene-highlighter- 2.4.0.jar(高亮器);

6.建立索引.  
进行搜索前要建立索引.
file --> doc  
Document doc = File2DocumentUtils.file2Document(filePath);  
/建立索引  
IndexWriter indexWriter = new IndexWriter(indexPath, analyzer, true, MaxFieldLength.LIMITED);  
indexWriter.addDocument(doc);  
indexWriter.close();  

7.简单的搜索:  
String queryString = "document";  
1,把要搜索的文本解析为 Query
String[] fields = { "name", "content" };  
QueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);  
Query query = queryParser.parse(queryString);  
2,进行查询
IndexSearcher indexSearcher = new IndexSearcher(indexPath);  
Filter filter = null;  
TopDocs topDocs = indexSearcher.search(query, filter, 10000);  
System.out.println(" 总共有【"+topDocs.totalHits+"】条匹配结果");  
 3,打印结果
for(ScoreDoc scoreDoc : topDocs.scoreDocs){  
    int docSn = scoreDoc.doc; // 文档内部编号  
    Document doc = indexSearcher.doc(docSn); // 根据编号取出相应的文档  
    File2DocumentUtils.printDocumentInfo(doc); // 打印出文档信息  
}  

8.在使用 Lucene 的 API 中,会遇到这样一个问题. 
在对属性值进行大小比较时(通常是使用范围查询,比较数字类型的时候),是按照字符串的比较规则,因为他们都是转成字符串后存储的。这样就会出现问题,如 “20”是大于“100”的(根据字符串的比较规则)。解决的方法是:让数字转成的字符串具有相同的位数,如位数不足,就在前面补相应数量个“0”。数字 到符串、字符串到数字的转换可以使用Lucene提供的工具类NumberTools完成。对于日期与字符串的双向转换,则可以使用Lucene提供的 DateTools完成。

9.分词器 Analyzer  
分词器,对文本资源进行切分,将文本按规则切分为一个个可以进行索引的最小单位(关键词).建立索引和进行搜索时都要用到分词器。为了保证能正确的搜索到 结果,在建立索引与进行搜索时使用的分词器应是同一个。
我们在使用分词器的时候要注意,不同语言的分词器是不一样的.
英文分词的流程:  
如用StandardAnalyzer对“IndexWriter addDocument's a javadoc.txt”进行分词:
切分词“IndexWriter”、“ addDocument's”、“a”、“ javadoc.txt”
排除停用词“IndexWriter”、“ addDocument's”、“ javadoc.txt”
形态还原“IndexWriter”、“ addDocument”、“ javadoc.txt”
转为小写“IndexWriter”、“ addDocument”、“ javadoc.txt”
中文分词的流程:  
对于中文分词,通常有三种方式:单字分词、二分法分词、词典分词。
单字分词:就是按照中文一个字一个字地进行分词。如:“我们是中国人”,
效果:“我”、“们”、“是”、“中”、“国”、“人”。(StandardAnalyzer就是这样)。
二分法分词:按两个字进行切分。如:“我们是中国人”,效果:“我们”、“们是”、“是中”、“中国”、“国人”。(CJKAnalyzer就是这样)。
词典分词:按某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法。如:“我们是中国 人”,效果为:“我们”、“中国人”。(使用极易分词的MMAnalyzer)。可以使用“极易分词”,或者是“庖丁分词”分词器。
总结:
上面涉及到了一个概念,停用词.那么停用词是什么呢.
有些词在文本中出现的频率非常高,而且对文本所携带的信息基本不产生影响,例如英文的“a、an、the、of”,或中文的 “的、了、着”,以及各种标点符号等,这样的词称为停用词(stop word)。文本经过分词之后,停用词通常被过滤掉,不会被进行索引。在检索的时候,用户的查询中如果含有停用词,检索系统也会将其过滤掉(因为用户输入 的查询字符串也要进行分词处理)。排除停用词可以加快建立索引的速度,还可以减小索引文件的大小。

10.高亮器  
可以截取一段文本(生成摘要),并且让关键字高亮显示(通过指定前缀与后缀实现,因为是在网页中显示,指定 “<font color=’red’>”,“</font>”,就会在网页中显示为红色)。

今天对全文检索和 Lucene的学习,有了很大的收获.不过一下,学习了很多的API,一时还不能全部记住.下课的时候,和老师和同学讨论了一下这个问题.老师给我们的思 路是:传智播客的教学信息量是很大的.大多数人都不会马上记住和全部理解,所以要在课后多多练习.并复习视频,及时做总结.这样的学习效果才能好,在课上 要跟上老师的思路,理解其中的思想才是最最关键的.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值