ParalellMultiSearcher:多线程搜索

多线程搜索与多域搜索的比较:

 

package  ch4.searcher;

import  java.io.IOException;
import  org.apache.lucene.analysis.standard. * ;
import  org.apache.lucene.document. * ;
import  org.apache.lucene.index. * ;
import  org.apache.lucene.search. * ;
import  org.apache.lucene.search.spans. * ;
import  org.apache.lucene.queryParser.ParseException;
import  org.apache.lucene.queryParser. * ;
public   class  ParallelMultiSearcherTest 
{
    
private   static  String INDEX_STORE_PATH = " d:/ch4/Termindex " ;
    
private   static   int  INDEX_DIR_NUMBER = 100 ;
    
public   static   void  main(String[] args) throws  Exception
    { 
      
for ( int  i = 0 ;i < INDEX_DIR_NUMBER;i ++ )
      {
          IndexWriter writer
= new  IndexWriter(INDEX_STORE_PATH + i, new  StandardAnalyzer(), true );
          Document doc
= new  Document();
          Field f
= new  Field( " bookname " , " 钢铁是怎样炼成的 " ,Field.Store.YES,Field.Index.TOKENIZED);
          doc.add(f);
          writer.close();
      }
      
      IndexSearcher[] searchers
= new  IndexSearcher[INDEX_DIR_NUMBER];
      
for ( int  i = 0 ;i < INDEX_DIR_NUMBER;i ++ )
      {
          searchers[i]
= new  IndexSearcher(INDEX_STORE_PATH + i);
      }
      
      Term t
= new  Term( " bookname " , " " );
      TermQuery q
= new  TermQuery(t);
      
      multiserSearcher(searchers,q);
      paralellSearcher(searchers,q);
    }
    
    
public   static   void  paralellSearcher(IndexSearcher[] searchers,Query q) throws  Exception
    {
        
long  startTime = System.currentTimeMillis(); 
        ParallelMultiSearcher multiSearcher
= new  ParallelMultiSearcher(searchers); 
        Hits hits
= multiSearcher.search(q); 
        
long  endTime = System.currentTimeMillis(); 
        System.out.println(
" ParallelMultiSearcher 搜索耗时为 " + (endTime - startTime) + " 毫秒 " ); 
        
for ( int  i = 0 ;i  < hits.length();i ++ )
        { 
            System.out.println(hits.doc(i)); 
        }

    }
    
public   static   void  multiserSearcher(IndexSearcher[] searchers,Query q) throws  Exception
    {
        
long  startTime = System.currentTimeMillis(); 
        MultiSearcher searcher
= new  MultiSearcher(searchers); 
        Hits hits
= searcher.search(q); 
        
long  endTime = System.currentTimeMillis(); 
        System.out.println(
" MultiSearcher 搜索耗时为 " + (endTime - startTime) + " 毫秒 " ); 
        
for ( int  i = 0 ;i  < hits.length();i ++ )
        { 
        System.out.println(hits.doc(i)); 
        }
    }

}

运行结果:

 

MultiSearcher 搜索耗时为16毫秒
ParallelMultiSearcher 搜索耗时为46毫秒

 

总而言之:索引越多,多线程搜索的效率也就越低;为什么呢?有待提高。

到这已经把索引和检索的内容都学完了,而且我把每个程序都调试了一遍,直接拷贝运行即可。以后可能没有一篇完整的代码,节省时间和空间啊!

That”s all!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值