Lucene搜索引擎开发

 

Lucene搜索引擎开发

第一次阅读:2012-12-28

可以使用Lucene 开发搜索引擎系统,目前最为著名的是 Nutch

建立索引代码分析:

Directory directory = FSDirectory. open ( new  File( "F:\\Lucene\\example\\index01" ));

/***----------------建立索引存放的位置目录 -----------------------------------------------------------------***/

IndexWriter writer =  new  IndexWriter(directory, new  IndexWriterConfig(Version. LUCENE_36 , new  StandardAnalyzer(Version. LUCENE_36 )));

/***----------------设置 Lucene 版本和分词器 ----------------------------------------------------------------***/

Document doc =  new  Document();

/***----------------建立 Document  对象 ---------------------------------------------------------------------***/

doc.add( new  Field( " field " , " content " ,Field.Store. YES ,Field.Index. ANALYZED ));

/***----------------将文本加入 Document 对象 (field 表示域名, content 表示文本内容 )----------------------***/

writer.addDocument(doc);

/***----------------将 Document 对象写入索引 ---------------------------------------------------------------***/

 

搜索代码分析:

/***----------------第一步:获取 Searcher-----------------------------------------------------------------***/

IndexReader reader =  null

Directory directory = FSDirectory. open ( new  File( "F:\\Lucene\\example\\index01" ));

if (reader== null )

reader = IndexReader. open (directory);

else

{

IndexReader tr = IndexReader. openIfChanged (reader);

if (tr!= null )

{

reader.close();

reader=tr;

}

}

IndexSearcher searcher =   new  IndexSearcher(reader);

/***----------------第二步:创建 Query (不同的搜索会创建不同的 Query 或者是其他组合) -------------***/

Query  query =  new  FuzzyQuery( new  Term( "name" , "make" ));

/***----------------第三步:创建 TopDocs ,获取结果 ---------------------------------------------------------***/

TopDocs tds = searcher.search(query, 10);

for (ScoreDoc sd : tds. scoreDocs )

{

Document doc = searcher.doc(sd. doc );

System. out .println(doc.get( "attach" ));

}

 

 

 

索引的建立具体讲解:

1,建立索引的基本过程

A:建立索引器 IndexWriter ,这相当于一本书的框架。

B:建立文档对象 Document ,这相当于一片文章。

C:建立信息字段对象 Field ,这相当于一片文章中的不同信息(标题,正文等)。

D:将 Field 添加到 Document 里面。

E:就 Document 添加到 IndexWriter 里面。

F:关闭索引器 IndexWriter

 

基本步骤:

A:创建 Field ,将文章的不同信息包装起来。

B:将多个 Field 组织到一个 Document 里面,这样就完成了对一篇文章的包装。

C:将多个 Document 组织到一个 IndexWriter 里面,也就是将多个文章组织起来,最终形成索引。

2, Field

Field field = new Field(Field名称,Field内容,存储方式,索引方式);

Field名称:

通常指字段名

Field内容:

通常指字段内容

存储方式:

Field.Store.NO不存储

Field.Store.YES完全存储

Field.Store.COMPRESS压缩存储  (注:对于文章正文一般采用不存储或者压缩存储)

索引方式:

Field.Index.NO不索引

Field.Index.NO_NORMS索引但不分析

Field.Index.UN_TOKENIZED索引但不分词

Field.Index.TOKENIZED 分词并且索引

3,Document

Document doc = new Document();

创建一个不含任何Field的空Document

doc.add(field);

将field加入Document

4,IndexWriter

IndexWriter writer = new IndexWriter(directory,indexWriterConfig);

Directory directory = FSDirectory.open(new File(path));

new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36))

writer.addDocument(doc);

将Document对象加入IndexWriter中

writer.close();
关闭IndexWriter

5,注意:

对于对某个文件或者某个目录下的所有的文件进行建立索引时,一般是将文件名和文件内容进行索引、文件全路径进行索引(可选)。

搜索的具体讲解:

执行搜索的基本方式:

1,创建搜索器对象IndexSearcher

IndexSearcher searcher = new IndexSearcher(indexReader);

Searcher.search(......);

搜索,有很多重载的方法,参数不一

searcher.close();

关闭IndexSearcher对象

2,封装搜索条件:Term对象和Query对象

Term term = new Term(字段名称,关键字);

Query query = new TermQuery(term);

3,搜索

TopDocs tds = searcher.search(query,........)

 

 

中文分词器讲解:

StandardAnalyzer标准分析器(默认是对每一个字进行索引),如果索引中有“红”,而搜索“工”是搜索不到的!

的方法:

(1) 单字切分

(2) 二分法

(3) 词典法

(4) 语义法

Lucene的分词器:

(1) 二分分词器

(2) Lucene自带的中文分词器

(3) NGram分词器

(4) JE分词器

(5) IK分词器

 

接下类的内容:

· 桌面搜索引擎开发

· web搜索引擎开发

· 数据解析(常见二进制文件,xml,html,集成数据......)

· Lucene自带的数据解析方法

· Lius

· 索引高级部分(索引的管理和优化)

· Nutch

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值