ImageVerifierCode 换一换
格式:DOC , 页数:19 ,大小:321.50KB ,
资源ID:3552016      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3552016.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Lucene初级教程.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

Lucene初级教程.doc

1、Lucene 初级教程 2007-12-26 15:24 点击次数:0 次 1 lucene 简介1.1 什么是 luceneLucene 是一个全文搜索框架,而不是应用产品。因此它并不像 或者 google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。2 lucene 的工作方式lucene 提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。2.1 写入流程源字符串首先经过 analyzer 处理,包括:分词,分成一个个单词;去除 sto

2、pword(可选)。将源中需要的信息加入 Document 的各个 Field 中,并把需要索引的 Field 索引起来,把需要存储的 Field 存储起来。将索引写入存储器,存储器可以是内存或磁盘。2.2 读出流程用户提供搜索关键词,经过 analyzer 处理。对处理后的关键词搜索索引找出对应的 Document。用户根据需要从找到的 Document 中提取需要的 Field。3 一些需要知道的概念3.1 analyzerAnalyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、“the”,中文中的“的”、“

3、地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率。分词的规则千变万化,但目的只有一个:按语义划分。这点在英文中比较容易实现,因为英文本身就是以单词为单位的,已经用空格分开;而中文则必须以某种方法将连成一片的句子划分成一个个词语。具体划分方法下面再详细介绍,这里只需了解分析器的概念即可。3.2 document用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个 Document 的形式存储在索引文件中的。用户进行搜索,也是以 Document 列表的形式返回。3.3 fie

4、ld一个 Document 可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过 Field 在 Document 中存储的。Field 有两个属性可选:存储和索引。通过存储属性你可以控制是否对这个 Field 进行存储;通过索引属性你可以控制是否对该 Field 进行索引。这看起来似乎有些废话,事实上对这两个属性的正确组合很重要,下面举例说明:还是以刚才的文章为例子,我们需要对标题和正文进行全文搜索,所以我们要把索引属性设置为真,同时我们希望能直接从搜索结果中提取文章标题,所以我们把标题域的存储属性设置为真,但是由于正文域太大了,我们为了缩

5、小索引文件大小,将正文域的存储属性设置为假,当需要时再直接读取文件;我们只是希望能从搜索解果中提取最后修改时间,不需要对它进行搜索,所以我们把最后修改时间域的存储属性设置为真,索引属性设置为假。上面的三个域涵盖了两个属性的三种组合,还有一种全为假的没有用到,事实上 Field 不允许你那么设置,因为既不存储又不索引的域是没有意义的。3.4 termterm 是搜索的最小单位,它表示文档的一个词语,term 由两部分组成:它表示的词语和这个词语所出现的 field。3.5 tockentocken 是 term 的一次出现,它包含 trem 文本和相应的起止偏移,以及一个类型字符串。一句话中可以

6、出现多次相同的词语,它们都用同一个 term 表示,但是用不同的 tocken,每个 tocken 标记该词语出现的地方。3.6 segment添加索引时并不是每个 document 都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个 segment。4 如何建索引4.1 最简单的能完成索引的代码片断IndexWriter writer = new IndexWriter(“/data/index/”, new StandardAnalyzer(), true);Document doc = new Document();doc.add

7、(new Field(“title“, “lucene introduction“, Field.Store.YES, Field.Index.TOKENIZED);doc.add(new Field(“content“, “lucene works well“, Field.Store.YES, Field.Index.TOKENIZED);writer.addDocument(doc);writer.optimize();writer.close();下面我们分析一下这段代码。首先我们创建了一个 writer,并指定存放索引的目录为“/data/index”,使用的分析器为 Standar

8、dAnalyzer,第三个参数说明如果已经有索引文件在索引目录下,我们将覆盖它们。然后我们新建一个 document。我们向 document 添加一个 field,名字是“title”,内容是“lucene introduction”,对它进行存储并索引。再添加一个名字是“content”的 field,内容是“lucene works well”,也是存储并索引。然后我们将这个文档添加到索引中,如果有多个文档,可以重复上面的操作,创建 document 并添加。添加完所有 document,我们对索引进行优化,优化主要是将多个 segment 合并到一个,有利于提高索引速度。随后将 wri

9、ter 关闭,这点很重要。对,创建索引就这么简单!当然你可能修改上面的代码获得更具个性化的服务。4.2 索引文本文件如果你想把纯文本文件索引起来,而不想自己将它们读入字符串创建 field,你可以用下面的代码创建 field:Field field = new Field(“content“, new FileReader(file);这里的 file 就是该文本文件。该构造函数实际上是读去文件内容,并对其进行索引,但不存储。Lucene 2 教程 Lucene 是 apache 组织的一个用 java 实现全文搜索引擎的开源项目。 其功能非常的强大,api 也很简单。总得来说用 Lucene

10、 来进行建立 和搜索和操作数据库是差不多的(有点像) ,Document 可以看作是 数据库的一行记录,Field 可以看作是数据库的字段。用 lucene 实 现搜索引擎就像用 JDBC 实现连接数据库一样简单。 Lucene2.0,它与以前广泛应用和介绍的 Lucene 1.4.3 并不兼容。 Lucene2.0的下载地址是 http:/apache.justdn.org/lucene/java/ 例子一 :1、在 windows 系统下的的 C 盘,建一个名叫 s 的文件夹,在该文件夹里面随便建三个 txt 文件,随便起名啦,就叫“1.txt“,“2.txt“和“3.txt“啦 其中 1

11、.txt 的内容如下: 中华人民共和国 全国人民 2006 年 而“2.txt“和“3.txt“的内容也可以随便写几写,这里懒写,就复制一个和 1.txt文件的内容一样吧2、下载 lucene 包,放在 classpath 路径中 建立索引: package ; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Date;

12、 import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; /* * author lighter date 2006-8-7 */ public class TextFileIndexer

13、 public static void main(String args) throws Exception /* 指明要索引文件夹的位置 ,这里是 C 盘的 S 文件夹下 */ File fileDir = new File( “ c:s “ ); /* 这里放索引文件的位置 */ File indexDir = new File( “ c:index “ ); Analyzer luceneAnalyzer = new StandardAnalyzer(); IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer

14、, true ); File textFiles = fileDir.listFiles(); long startTime = new Date().getTime(); / 增加 document 到索引去 for ( int i = 0 ; i 0 ) System.out.println( “ 找到: “ + hits.length() + “ 个结果! “ ); 其运行结果:找到: 3 个结果 ! Lucene 其实很简单的,它最主要就是做两件事: 建立索引和进行搜索 来看一些在 lucene 中使用的术语 ,这里并不打算作详细的介绍 ,只是点一下而已-因为这一个世界有一种好东西,叫

15、搜索。IndexWriter:lucene 中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。Analyzer:分析器, 主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer 分析器,StopAnalyzer 分析器,WhitespaceAnalyzer 分析器等。Directory:索引存放的位置;lucene 提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地 lucene 提供了FSDirectory 和 RAMDirectory 两个类。Document:文档;Document 相当于一个要进行索引

16、的单元,任何可以想要被索引的文件都必须转化为 Document 对象才能进行索引。Field:字段。IndexSearcher:是 lucene 中最基本的检索工具,所有的检索都会用到IndexSearcher 工具;Query:查询,lucene 中支持模糊查询,语义查询,短语查询,组合查询等等,如有 TermQuery,BooleanQuery,RangeQuery,WildcardQuery 等一些类。QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成 Query 对象。Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的

17、目的。在 lucene 中,搜索的结果的集合是用 Hits 类的实例来表示的。上面作了一大堆名词解释,下面就看几个简单的实例吧: 1、简单的的 StandardAnalyzer 测试例子 package ; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import

18、org.apache.lucene.analysis.standard.StandardAnalyzer; public class StandardAnalyzerTest / 构造函数, public StandardAnalyzerTest() public static void main(String args) / 生成一个 StandardAnalyzer 对象 Analyzer aAnalyzer = new StandardAnalyzer(); / 测试字符串 StringReader sr = new StringReader( “ lighter javaeye com

19、 is the are on “ ); / 生成 TokenStream 对象 TokenStream ts = aAnalyzer.tokenStream( “ name “ , sr); try int i = 0 ; Token t = ts.next(); while (t != null ) / 辅助输出时显示行号 i + ; / 输出处理后的字符 System.out.println( “ 第 “ + i + “ 行: “ + t.termText(); / 取得下一个字符 t = ts.next(); catch (IOException e) e.printStackTrace

20、(); 显示结果:第 1 行 :lighter 第 2 行 :javaeye 第 3 行 :com 提示一下: StandardAnalyzer 是 lucene 中内置的“标准分析器“,可以做如下功能: 1、对原有句子按照空格进行了分词 2、所有的大写字母都可以能转换为小写的字母 3、可以去掉一些没有用处的单词,例如“is“,“the“,“are“等单词,也删除了所有的标点 查看一下结果与“new StringReader(“lighter javaeye com is the are on“)“作一个比较就清楚明了。 这里不对其 API 进行解释了,具体见 lucene 的官方文档。需要注

21、意一点,这里的代码使用的是 lucene2 的 API,与 1.43 版有一些明显的差别。 2、看另一个实例, 简单地建立索引,进行搜索 package ; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.queryP

22、arser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.store.FSDirectory; public class FSDirectoryTest / 建立索引的路径 public static final String path = “ c:index2 “ ; public static void main(S

23、tring args) throws Exception Document doc1 = new Document(); doc1.add( new Field( “ name “ , “ lighter javaeye com “ ,Field.Store.YES,Field.Index.TOKENIZED); Document doc2 = new Document(); doc2.add( new Field( “ name “ , “ lighter blog “ ,Field.Store.YES,Field.Index.TOKENIZED); IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true ), new StandardAnalyzer(), true ); writer.setMaxFieldLength( 3 ); writer.addDocument(doc1); writer.setMaxFieldLength( 3 );

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。