首先,我们应该在硬盘或者内存中创建我们表中需要建立索引的字段,创建的核心类使用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类,对查询结果进行操作:
- Hits hits = indexSearcher.search(query);
- System.out.println("找到了"+hits.length()+"结果");
- for(int i=0;i<hits.length;i++)
- {
- Document doc = hits.doc(i);
- System.out.println(doc.get("name"));
- }
全文检索的基本原理: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