使用org.apache.lucene创建和查询索引核心代码详解

首先,我们应该在硬盘或者内存中创建我们表中需要建立索引的字段,创建的核心类使用IndexWriter

IndexWriter(File path, Analyzer a, boolean create)
IndexWriter(String path, Analyzer a, boolean create)
构造参数:一个索引文件目录,一个分析器(一般用标准的这个),最后一个参数是标识是否清空索引目录

a.索引格式:其实索引目录有两种格式,一种是除配置文件外,每一个Document独立成为一个文件(这种搜索起来会影响速度)。另一种是全部的Document成一个文件,这样属于复合模式就快了。
b.索引文件可放的位置:索引可以存放在两个地方1.硬盘,2.内存;

放在硬盘上可以用FSDirectory(),放在内存的用RAMDirectory()不过一关机就没了

使用硬盘作为索引创建目录:

FSDirectory.getDirectory(File file, boolean create)
FSDirectory.getDirectory(String path, boolean create)两个工厂方法返回目录

//待创建的文档目录

FSDirectory.open(new File(INDEX_STORe_PATH));

使用内存作为目录:

New RAMDirectory()就直接可以再和IndexWriter(Directory d, Analyzer a, boolean create)一配合就行了如:

创建IndexWriter对象:

硬盘:IndexWrtier writer = new IndexWriter(FSDirectory.getDirectory(“c:\\index”,true),new StandardAnlyazer(),true);

内存:IndexWrtier writer = new IndexWriter(new RAMDirectory(),new StandardAnlyazer(),true);

new StandardAnalyzer(Version.LUCENE_34);//表示选择分词工具

我们还可以给IndexWriter设置相关属性:

writer.setUseCompoundFile(true); //设置
writer.setMaxBufferedDocs(100); //设置缓存
writer.setMergeFactor(10);

创建Document索引目录:

Document doc =new Document();

//给字段添加索引(属性名,属性名所对应的值,标志该数据源(字段)被存储,标志该数据源(字段)被索引)

doc.add(new Field("name","工作日志",Field.Store.YES,Field.Index.TOKENIZED));

将Document添加到IndexWriter中:

writer.addDocument(doc);

writer.commit();

writer.close();


查询索引:

查询索引首先要指定位置:

IndexSearcher indexSearcher =new IndexSearcher("c:\\indexDisk");

创建查询解析器

QueryParser queryParser = new QueryParser("name",new StandardAnalyzer());

Query query = queryParser.parse("工作");


执行查询返回Hits类,对查询结果进行操作:

  1. Hits hits = indexSearcher.search(query);
  2. System.out.println("找到了"+hits.length()+"结果");
  3. for(int i=0;i<hits.length;i++)
  4. {
  5. Document doc = hits.doc(i);
  6. System.out.println(doc.get("name"));
  7. }
全文检索的基本原理:http://forfuture1978.iteye.com/blog/546771
Lucene的学习总结:http://forfuture1978.iteye.com/category/89151
Lucene3.5--建索引相关知识总结:http://www.cnblogs.com/qingfeideyi/archive/2012/03/04/2379526.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值