lucene入门

来源:互联网 发布:淘宝客服工资一般多少 编辑:程序博客网 时间:2024/05/16 09:45

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开发源代码的全文检索引擎工具包。

全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。全文检索(Full-Text Retrieval)是指以文本作为检索对象,找出含有指定词汇的文本。全面、准确和快速是衡量全文检索系统的关键指标。

lucene使用场景主要是做站内搜索,即对一个系统内的资源进行搜索。如BBS、BLOG中的文章搜索,网上商店中的商品搜索等。

这是其中最常用的jar包:

  Lucene-core-4.4.0.jar,其中包括了常用的文档,索引,搜索,存储等相关核心代码。

  Lucene-analyzers-common-4.4.0.jar,这里面包含了各种语言的词法分析器,用于对文件内容进行关键字切分,提取。

  Lucene-highlighter-4.4.0.jarlucene-memory-4.4.0.jar 这两个jar包主要用于搜索出的内容高亮显示。

  Lucene-queryparser-4.4.0.jar,提供了搜索相关的代码,用于各种搜索,比如模糊搜索,范围搜索,等等。

Lucene的使用

①创建索引

创建索引可分为3个操作

1.分词,将原文档传给分词组件进行分词,得到词元。
2.词元处理,将词元传给语言处理组件进行一些语言处理,例如:变小写,转词根。
3.索引,对处理后的词元建立词典

创建索引时需要两个目录,一个是索引文件的存放目录,一个是待索引的文件目录。在创建索引时,我们首先要加载或创建索引目录。常用的目录创建方式有两种:
通过RAMDirectory()类创建一个内存目录,内存目录优点是速度快,缺点是程序退出后索引目录数据就会丢失。
 RAMDirectory directory = new RAMDirectory();
通过FSDirectory类加载一个文件目录,该方式创建的索引数据保存在磁盘上,不会因为程序的退出而消失。
Directory dir = FSDirectory.open(new File(indexPath)); 

创建和维护索引是通过IndexWriter对象来完成的Analyzer为索引分词器,Document是文档,一个Document可以包含多个FieldField代表文档的属性。

//索引存放的目录Directory directory=FSDirectory.open(new File("c:/directory"));//创建将文章建立成索引时所用的分词器...Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_44);//索引库的配置/** * 1,lucene 当前使用的版本 * 2,创建索引时所用的分词器。 */IndexWriterConfig indexWriterConfig=new IndexWriterConfig(Version.LUCENE_44,analyzer);//创建用于操作索引的对象。IndexWriter indexWriter=new IndexWriter(directory,indexWriterConfig);//创建document ,因为在索引库当中保存的都是documentDocument document=new Document();//根据字段的内容创建对应类型的字段, 1字段的名称,2字段的值,3是否往索引库当中村粗...StringField field=new StringField("title","123",Store.YES);document.add(field);document.add(new TextField("content","321",Store.YES));indexWriter.addDocument(document);indexWriter.close();
②索引检索

索引检索可分为3个操作:

1.对查询语句进行词法分析、语法分析和语言处理。词法分析主要是识别单词和关键字。语法分析主要是根据查询语句的语法规则来形成一颗语法树。语言处理与索引建立过程中语言处理几乎相同。
2.搜索索引,得到符合语法树的文档
3.根据得到的文档和查询语句的相关性,对结果进行排序。

索索引首先要读取索引文档,并建立IndexSearch对象。Lucene通过Query接口实现类来对查询条件进行分析。Lucene支持单Filed查询、多Field查询、逻辑组合查询、模糊查询、范围查询、通配符查询等。

Directory directory=FSDirectory.open(new File("c:/directory"));//索引存放的目录IndexReader indexReader=DirectoryReader.open(directory);//创建索引读取器IndexSearcher indexSearcher=new IndexSearcher(indexReader);//用于查询索引的对象。。。String keywords="lucene";//查询的关键字org.apache.lucene.search.Query query=new TermQuery(new Term("title",keywords));//构造查询条件。。TopDocs topdocs=indexSearcher.search(query, 100);//返回结果100条。
③更新索引

Lucene索引的更新为调用IndexWriterupdateDocument方法,该方法接受两个参数,第一个Term词向量,第二个为新增的文档,可以是单个文档,也可以是批量文档。Lucene会先根据Term删除索引库中原有的文档,再向索引库中添加新的documentTerm的第一参数表示要在文档的哪个Field上查找,第二个代表查询关键字。

    Term term=new Term(fieldName, fieldValue);Document doc=ArticleDocumentUtils.articleToDocument(article);indexWriter.updateDocument(term, doc);

④删除索引。
Lucene索引的删除的可以根据Query对象来删除,也可以根据Term来删除,也可以一次删除全部索引。

Term term=new Term(fieldName, fieldValue);//delete from table where conditionindexWriter.deleteDocuments(term);
完整代码下载地址:http://download.csdn.net/detail/sunqingzhong44/9598937


0 0