综合二区_欧美成人综合_欧美成人二区_a黄视频_亚洲视频在线播放_一区二区三区视频免费看

µ±Ç°Î»ÖãºÊ×Ò³ > ÍøÕ¾¾ÉÀ¸Ä¿ > ѧϰ԰µØ > Éè¼ÆÈí¼þ½Ì³Ì > LuceneÓ¦ÓõÄÒ»µãÌå»á

LuceneÓ¦ÓõÄÒ»µãÌå»á
2010-01-13 23:07:22  ×÷Õß:  À´Ô´:
LuceneÓ¦ÓÃ(ÎÒÓõÄÊÇLucene2.1.0,ÓÐЩ¹ÛµãÓпÉÄÜÒ²²»Ì«ÕýÈ·)

1.¶àÏß³ÌË÷Òý£¬¹²Ïíͬһ¸öIndexWriter¶ÔÏó

ÕâÖÖ·½Ê½Ð§ÂʺÜÂý£¬Ö÷ÒªÔ­ÒòÊÇÒòΪ£º

java ´úÂë
 
  1. public void addDocument(Document doc, Analyzer analyzer) throws IOException {  
  2. SegmentInfo newSegmentInfo = buildSingleDocSegment(doc, analyzer);  
  3. synchronized (this) {  
  4. ramSegmentInfos.addElement(newSegmentInfo);//Õâ¾äºÜÕ¼ÓÃЧÂÊ  
  5. maybeFlushRamSegments();  
  6. }  
  7. }  
ramSegmentInfos ÊÇÒ»¸öSegmentInfos ¶ÔÏó£¬Õâ¸ö¶ÔÏóextends Vector,VectorµÄaddElementÊÇͬ²½µÄ¡£Õâ¸ö¿ÉÄÜÊǵ¼ÖÂЧÂÊÂýµÄÖ÷ÒªÔ­Òò°É.

2 ¶àÏß³ÌË÷Òý£¬  ÏÈдµ½RAMDirectory£¬ÔÙÒ»´ÎÐÔдµ½FSDirectory

¹¦ÄÜ£ºÊ×ÏÈÏòRAMDirectoryÀïд£¬µ±´ïµ½1000¸öDocumentáᣬÔÙÏòFSDirectoryÀïд¡£

µ±¶àÏß³ÌÖ´ÐÐʱ£¬»á´óÁ¿±¨java.lang.NullPointerException

×Ô¼ºÐ´µÄ¶àÏß³ÌË÷ÒýµÄÀàΪ£¨IndexWriterServer£¬¸Ã¶ÔÏóÖ»ÔÚServerÆô¶¯Ê±³õʼ»¯Ò»´Î£©£º
 

´úÂë
  1. public class IndexWriterServer{  
  2. private static IndexWriter indexWriter = null;  
  3.       
  4.     //private String indexDir ;//Ë÷ÒýĿ¼£»  
  5.       
  6.     private static  CJKAnalyzer analyzer = null;  
  7.       
  8.     private static RAMDirectory ramDir = new RAMDirectory();  
  9.       
  10.     private static IndexWriter ramWriter = null;  
  11.       
  12.     private static int diskFactor = 0;//ÄÚ´æÖÐÏÖÔÚÓжàÉÙDocument  
  13.       
  14.     private static long ramToDistTime = 0;//ÄÚ´æÏòÓ²ÅÌдÐèÒª¶àÉÙʱ¼ä  
  15.       
  16.     private int initValue = 1000;//ÄÚ´æÖдﵽ¶àÉÙDocument£¬²ÅÏòÓ²ÅÌд  
  17.       
  18.     private static IndexItem []indexItems = null;  
  19.       
  20.     public IndexWriterServer(String indexDir){  
  21.         initIndexWriter(indexDir);  
  22.     }  
  23.     public void initIndexWriter(String indexDir){  
  24.         boolean create = false;//ÊÇ·ñ´´½¨ÐµĠ 
  25.           
  26.         analyzer = new CJKAnalyzer();  
  27.           
  28.         Directory directory = this.getDirectory(indexDir);  
  29.         //ÅжÏÊÇ·ñΪË÷ÒýĿ¼  
  30.         if(!IndexReader.indexExists(indexDir)){  
  31.             create = true;  
  32.         }  
  33.           
  34.         indexWriter = getIndexWriter(directory,create);  
  35.           
  36.         try{  
  37.             ramWriter = new IndexWriter(ramDir, analyzer, true);  
  38.         }catch(Exception e){  
  39.             logger.info(e);  
  40.         }  
  41.           
  42.         indexItems = new IndexItem[initValue+2];  
  43.     }  
  44.   
  45. /** 
  46.      * Éú³Éµ¥¸öItemË÷Òý 
  47.      */  
  48.     public boolean generatorItemIndex(IndexItem item, Current __current) throws DatabaseError, RuntimeError{  
  49.         boolean isSuccess = true;//ÊÇ·ñË÷Òý³É¹¦  
  50.           
  51.         try{  
  52.               
  53.             Document doc = getItemDocument(item);  
  54.               
  55.             ramWriter.addDocument(doc);//¹Ø¼ü´úÂ룬´íÎó¾ÍÊÇ´ÓÕâÀﱨ³öÀ´µÄ  
  56.               
  57.             indexItems[diskFactor] = item;//ΪÊý¾ÝÍÚ¾òʹÓà 
  58.             diskFactor ++;  
  59.             if((diskFactor % initValue) == 0){  
  60.                 ramToDisk(ramDir,ramWriter,indexWriter);  
  61.                 //ramWriter = new IndexWriter(ramDir, analyzer, true);  
  62.                 diskFactor = 0;  
  63.                   
  64.                 //Êý¾ÝÍÚ¾ò  
  65.                 isSuccess = MiningData();  
  66.   
  67.                   
  68.             }  
  69.               
  70.             doc = null;  
  71.               
  72.   
  73.             logger.info("generator index item link:" + item.itemLink  +" success");  
  74.         }catch(Exception e){  
  75.             logger.info(e);  
  76.             e.printStackTrace();  
  77.       
  78.             logger.info("generator index item link:" + item.itemLink  +" faiture");  
  79.             isSuccess = false;  
  80.         }finally{  
  81.             item = null;  
  82.         }  
  83.           
  84.         return isSuccess;  
  85.     }  
  86.   
  87. public  void ramToDisk(RAMDirectory ramDir, IndexWriter ramWriter,IndexWriter writer){  
  88.         try{  
  89.             ramWriter.close();//¹Ø¼ü´úÂ룬°ÑfileMap¸³ÖµÎªnullÁË  
  90.             ramWriter = new IndexWriter(ramDir, analyzer, true);//ÖØÐ¹¹½¨Ò»¸öramWriter¶ÔÏó¡£ÒòΪËüµÄfileMapΪnullÁË,µ«ÊǺÃÏñ²¢Ã»ÓÐÌ«´ó×÷Óà 
  91.             Directory ramDirArray[] = new Directory[1];  
  92.             ramDirArray[0] = ramDir;  
  93.             mergeDirs(writer, ramDirArray);  
  94.         }catch(Exception e){  
  95.             logger.info(e);  
  96.         }  
  97.     }  
  98.     /** 
  99.      * ½«ÄÚ´æÀïµÄË÷ÒýÐÅϢдµ½Ó²ÅÌÀï 
  100.      * @param writer 
  101.      * @param ramDirArray 
  102.      */   
  103.     public  void mergeDirs(IndexWriter writer,Directory[] ramDirArray){  
  104.         try {  
  105.             writer.addIndexes(ramDirArray);  
  106.             //optimize();  
  107.         } catch (IOException e) {  
  108.             logger.info(e);  
  109.         }  
  110.     }  
  111.       
  112. }  

Ö÷ÒªÔ­Òò´ó¸ÅÊÇÒòΪ£ºÔÚµ÷ÓÃramWriter.close();ʱ£¬Lucene2.1ÀïRAMDirectory µÄclose()·½·¨
 

´úÂë
  1. public final void close() {  
  2.    fileMap = null;  
  3.  }  

°ÑfileMap ¸øÖÃnullÁË£¬µ±¶àÏß³ÌÖ´ÐÐramWriter.addDocument(doc);ʱ£¬×îÖÕÖ´ÐÐRAMDirectory µÄ·½·¨£º
´úÂë
  1. public IndexOutput createOutput(String name) {  
  2.     RAMFile file = new RAMFile(this);  
  3.     synchronized (this) {  
  4.     RAMFile existing = (RAMFile)fileMap.get(name);//fileMapΪnull£¬ËùÒÔ±¨£ºNullPointerException£¬  
  5.       if (existing!=null) {  
  6.         sizeInBytes -= existing.sizeInBytes;  
  7.         existing.directory = null;  
  8.       }  
  9.       fileMap.put(name, file);  
  10.     }  
  11.     return new RAMOutputStream(file);  
  12.   }  

Ìáʾ£ºÔÚÍøÉÏËÑË÷ÁËһϣ¬ºÃÏñÕâ¸öÊÇluceneµÄÒ»¸öbug£¨http://www.opensubscriber.com/message/java-user@lucene.apache.org/6227647.html£©£¬µ«ÊǺÃÏñ²¢Ã»Óиø³ö½â¾ö·½°¸¡£


 

3.¶àÏß³ÌË÷Òý£¬Ã¿¸öÏß³ÌÒ»¸öIndexWriter¶ÔÏó£¬Ã¿¸öIndexWriter °ó¶¨Ò»¸öFSDirectory¶ÔÏó¡£Ã¿¸öFSDirectory°ó¶¨Ò»¸ö±¾µØµÄ´ÅÅÌĿ¼£¨Î¨Ò»µÄ£©¡£µ¥¶À¿ª±ÙÒ»¸öÏ̳߳öÀ´¼à¿ØÕâЩË÷ÒýỊ̈߳¨¼à¿ØỊ̈߳©£¬Ò²¾ÍÊÇ˵¸ºÔðË÷ÒýµÄÏß³ÌË÷ÒýÍêÁËÒԺ󣬸øÕâ¸ö¼à¿ØÏ̵߳ÄqueueÀï·¢ËÍÒ»¸ö¶ÔÏó£ºqueue.add(directory);,Õâ¸ö¼à¿ØÏֳɵÄqueue¶ÔÏóÊǸöÈ«¾ÖµÄ¡£µ±Õâ¸öqueueµÄsize() > 20 ʱ£¬¼à¿ØÏß³Ì °ÑÕâ20¸öË÷ÒýĿ¼ºÏ²¢(merge):indexWriter.addIndexes(dirs);//ºÏ²¢Ë÷Òý,ºÏ²¢µ½ÕæÕýµÄË÷ÒýĿ¼Àï¡£,ºÏ²¢ÍêÁËÒÔºó£¬È»ºóɾ³ýµôÕâЩÒѾ­ºÏ²¢Á˵ÄĿ¼¡£

µ«ÊÇÕâÑùÒ²Óм¸¸öbug:

a. ºÏ²¢Ï̵߳ÄËÙ¶È Ð¡ÓÚ Ë÷ÒýÏ̵߳ÄËÙ¶È¡£µ¼Ö Ŀ¼ԽÀ´Ô½¶à

b.¾­³£»á±¨Ò»¸öÀàËÆÕâÑùµÄ´íÎó£º
 

2007-06-08 10:49:18 INFO [Thread-2] (IndexWriter.java:1070) - java.io.FileNotFoundException: /home/spider/luceneserver/merge/item_d28686afe01f365c5669e1f19a2492c8/_1.cfs (No such file or directory)
 


 

4.µ¥Ïß³ÌË÷Òý£¬µ÷¼¸¸ö²ÎÊýáᣬЧÂÊÒ²·Ç³£¿ì(Ë÷ÒýÒ»ÌõÐÅÏ¢´ó¸ÅÔÚ6-30 msÖ®¼ä)¡£¸Ð¾õÒ»°ãµÄÐèÇóµ¥Ï߳̾͹»ÓÃÁË¡£ÕâЩ²ÎÊýÈçÏÂ:

   private int mergeFactor = 100;//´ÅÅÌÀï´ïµ½¶àÉÙáá»á×Ô¶¯ºÏ²¢
    private int maxMergeDocs = 1000;//ÄÚ´æÖдﵽ¶àÉÙ»áÏò´ÅÅÌдÈë
    private int minMergeDocs = 1000;//lucene2.0ÒѾ­È¡ÏûÁË
    private int maxFieldLength = 2000;//Ë÷ÒýµÄ×î´óÎÄÕ³¤¶È
    private int maxBufferedDocs = 10000;//Õâ¸ö²ÎÊý²»ÄÜÒª£¬Òª²»È»²»»á×Ô¶¯ºÏ²¢ÁË


µÃ³öµÄ½áÂÛÊÇ:LuceneµÄ¶àÏß³ÌË÷Òý»áÓÐЩÎÊÌ⣬Èç¹ûûÓÐÌØÊâÐèÇ󣬵¥Ï̵߳ÄЧÂʼ¸ºõ¾ÍÄÜÂú×ãÐèÇó.


 

Èç¹ûµ¥Ï̵߳ÄËÙ¶ÈÂú×ã²»ÁËÄãµÄÐèÇó£¬Äã¿ÉÒԶ࿪¼¸¸öÓ¦Óá£Ã¿¸öÓ¦Óö¼°ó¶¨Ò»¸öFSDirectory,È»ºóͨ¹ýsearchʱͨ¹ýRMIÈ¥ÕâЩË÷ÒýĿ¼½øÐÐËÑË÷¡£

RMI Server¶Ë,¹Ø¼üÐÔ´úÂë:


 

 

java ´úÂë
  1. private void initRMI(){  
  2.         //µÚÒ»°²È«ÅäÖà 
  3.         if (System.getSecurityManager() == null) {  
  4.             System.setSecurityManager( new RMISecurityManager() );  
  5.         }  
  6.         //×¢²á  
  7.         startRMIRegistry(serverUrl);  
  8.           
  9.         SearcherWork searcherWork = new SearcherWork("//" + serverUrl + "/" + bindName, directory);  
  10.           
  11.         searcherWork.run();  
  12.           
  13.     }  
  14.   
  15. public class SearcherWork  {  
  16. //   Logger  
  17.     private static Logger logger = Logger.getLogger(SearcherWork.class);  
  18.     private String serverUrl =null;  
  19.     private Directory directory =null;  
  20.   
  21.     public SearcherWork(){  
  22.           
  23.     }  
  24.       
  25.     public SearcherWork(String serverUrl, Directory directory){  
  26.         this.serverUrl = serverUrl;  
  27.         this.directory = directory;  
  28.     }  
  29.       
  30.     public void run(){  
  31.         try{  
  32.              Searchable searcher = new IndexSearcher(directory);  
  33.              SearchService service = new SearchService(searcher);  
  34.              Naming.rebind(serverUrl, service);  
  35.              logger.info("RMI Server bind " + serverUrl + " success");  
  36.               
  37.         }catch(Exception e){  
  38.             logger.info(e);  
  39.             System.out.println(e);  
  40.         }  
  41.     }  
  42.       
  43.   
  44. }  
  45.   
  46. public class SearchService extends RemoteSearchable implements Searchable {  
  47.       
  48.     public SearchService (Searchable local) throws RemoteException {  
  49.         super(local);  
  50.     }  
  51. }  

¿Í»§¶Ë¹Ø¼üÐÔ´úÂë:

 

java ´úÂë
 
  1. RemoteLuceneConnector rlc= new RemoteLuceneConnector();  
  2. RemoteSearchable[] rs= rlc.getRemoteSearchers();  
  3. MultiSearcher multi = new MultiSearcher(rs);  
  4. Hits hits = multi.search(new TermQuery(new Term("content","Öйú")));  

 


°²»ÕлªµçÄÔѧУרҵְҵ¹æ»®Ê¦ÎªÄãÌṩ¸ü¶à°ïÖú¡¾ÔÚÏß×Éѯ¡¿
Ö÷Õ¾Ö©Öë³ØÄ£°å£º 91精品在线观看入口 | 久久久久国产成人免费精品免费 | 亚洲精品美女视频 | 国产福利在线小视频 | 亚洲天堂成人在线视频 | 日本成做爰免费中文字幕 | 久久久亚洲国产天美传媒修理工 | 黄色99 | 亚洲精品美女久久久久久久久久 | 免费看片91 | 日韩精品2 | 中文字幕五区 | 国产精品一区不卡 | 国产电影久久久久久久 | 黄色成人av在线 | 丰满少妇大力进入av亚洲葵司 | 男人网站视频 | 免费亚洲精品 | 久久精品国产午夜做受体验区 | 久中文字幕 | www91在线观看| 91| 51嫩草亚洲精品永久 | 国产福利视频在线 | 亚一区| 亚洲国产精品视频一区二区 | 精品天堂 | 99视频在线看 | 182tv成人福利视频免费看 | 国产精品一区91 | 91免费观看网站 | 97狠狠操 | 国产精品久免费的黄网站 | 国产福利在线视频 | 国产精品久久网站 | 天天爽夜夜爽人人爽一区二区 | 久久久久久久久久久亚洲 | 九色视频在线观看 | 91精品国产高清一区二区三区 | 91香蕉视频导航 | 久久成人在线观看 |