Lucene索引优化
/**
*
* 索引优化...
* @author Administrator
*
*/
public class TestOptimise {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Directory directory=FSDirectory.open(new File("e:/news/indexDIR"));
IndexWriterConfig indexWriterConfig=new IndexWriterConfig(Version.LUCENE_44, LuceneUtils.getAnalyzer());
LogMergePolicy mergePolicy=new LogDocMergePolicy();
/**
* 当值越小,运用更少的内存建立索引,搜索的时候越快,创建的时候越慢,
* 当值越大,运用更多的内存建立索引,搜索的时候越慢,创建的时候越快....
*
* 大值:大于10
* 小值 :大于2 ,小于10 。。
*
*/
mergePolicy.setMergeFactor(8);
//设置索引文件的合并策略...
indexWriterConfig.setMergePolicy(mergePolicy);
IndexWriter indexWriter=new IndexWriter(directory, indexWriterConfig);
}
@Test
public void testSearcher() throws IOException{
//索引在硬盘上面存放的 位置...
Directory directory=FSDirectory.open(new File("d:/indexDir"));
//通过此对象将directory(存放在硬盘上的索引)读取到rmdDirectory(内存当中来...)
IOContext context=new IOContext();
// /索引在内存中存放
Directory rmdDirectory=new RAMDirectory(directory,context);
IndexReader indexReader=DirectoryReader.open(rmdDirectory);
IndexSearcher indexSearcher=new IndexSearcher(indexReader);
// /author 是StringFiled 没有被分词。
//新浪,新,浪
Query query=new TermQuery(new Term("author","新浪微博"));
TopDocs topDocs=indexSearcher.search(query, 50);
System.out.println(topDocs.totalHits);
}
}