ParalellMultiSearcher : 多线程搜索源代码

package searcher;


import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MultiSearcher;
import org.apache.lucene.search.ParallelMultiSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searchable;
import org.apache.lucene.search.TermQuery;


public class ParalellMultiSearcher {


//设定存放索引的目录
private static String INDEX_STORE_PATH_BASE = "E:\\Lucene项目\\index";

//设定总共的索引目录数量
private static int INDEX_DIR_NUMBER = 100;

public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根

//循环创建索引
for(int i = 0; i < INDEX_DIR_NUMBER; i++)
{
//索引目录名为INDEX_STORE_PATH_BASE再加上一个数字
IndexWriter writer = new IndexWriter(INDEX_STORE_PATH_BASE + i, new StandardAnalyzer(), true);

//为每个索引加入1个文档
Document doc = new Document();
Field f1 = new Field("bookname", "钢铁是怎样炼成的", Field.Store.YES, Field.Index.TOKENIZED);
doc.add(f1);

writer.addDocument(doc);

//一定要管闭索引器
writer.close();
}

//索引创建完毕,按索引目录数量来构造IndexSearcher的实例
IndexSearcher[] searchers = new IndexSearcher[INDEX_DIR_NUMBER];
for(int i = 0; i < INDEX_DIR_NUMBER; i++)
{
searchers[i] = new IndexSearcher(INDEX_STORE_PATH_BASE + i);
}

//构建1个TermQuery
Term t = new Term("bookname", "钢");
TermQuery q = new TermQuery(t);

//使用MultiSearcher进行搜索
multiSearch(searchers, q);

//使用ParalellMutiSearcher进行搜索
paralellSearcher(searchers, q);
}


public static void paralellSearcher(IndexSearcher[] searchers, Query q) throws Exception{
ParallelMultiSearcher searcher = new ParallelMultiSearcher(searchers);
long start = System.currentTimeMillis();
Hits hits = searcher.search(q);
long end = System.currentTimeMillis();
//就算搜索用时
System.out.println("使用parallelMultiSearcher用时 : " + (end - start) + "毫秒");
}

public static void multiSearch(IndexSearcher[] searchers, Query q) throws Exception{
MultiSearcher msearcher = new MultiSearcher(searchers);
long start = System.currentTimeMillis();
Hits hits = msearcher.search(q);
long end = System.currentTimeMillis();

//计算搜索用时
System.out.println("使用MultiSearcher用时 : " + (end - start) + "毫秒");



}

你可能感兴趣的:(ParalellMultiSearcher : 多线程搜索源代码)