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!

 

阅读更多
文章标签: 多线程 path string
个人分类: Lucene
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭