开发搜索引擎初步(一)建立索引(Lucene实现)

来源:互联网 发布:天津话发音软件 编辑:程序博客网 时间:2024/05/17 03:01
 开发自己的搜索引擎完成了一段时间了,现在准备开始梳理一下思路,把以前的总结一下,为以后做真正的“谷歌”埋下伏笔,呵呵。。。。。。

    一。Lucene的下载

   牛逼的Apache旗下的Lucene,呵呵,无人不知啊,http://lucene.apache.org/,去这个地址自己下载,别说不会Dowmload

    二.使用Lucene建立索引

    将下载下来的包解压,把里面的Core,memory,analyzer啥的都拿出来,配置到自己的Eclipse上面,下面的事情就是写代码了。

view plaincopy to clipboardprint?
  1. package com.dreamers.creatindex;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5.   
  6. import org.apache.lucene.analysis.Analyzer;  
  7. import org.apache.lucene.document.Document;  
  8. import org.apache.lucene.document.Field;  
  9. import org.apache.lucene.index.IndexWriter;  
  10. import org.apache.lucene.store.FSDirectory;  
  11. import org.dom4j.DocumentException;  
  12. import org.wltea.analyzer.lucene.IKAnalyzer;  
  13.   
  14.   
  15. import com.dreamers.xml.*;  
  16. import com.dreamers.read.*;  
  17.   
  18. /** 
  19.  * @category 创建所有XML索引 
  20.  * @author bird 
  21.  * 
  22.  */  
  23. public class CreatIndex {  
  24.     private String INDEX_STORE_PATH ;  
  25.       
  26.     //创建索引   
  27.     @SuppressWarnings("deprecation")  
  28.     public void creatIndex(){  
  29.         try{  
  30.             GetPath path = new GetPath();  
  31.             INDEX_STORE_PATH = path.getIndexPath();  
  32.             File file = new File(INDEX_STORE_PATH);  
  33.             Analyzer analyzer = new IKAnalyzer();  
  34.             XmlReader xml = new XmlReader();  
  35.             FSDirectory directory = FSDirectory.open(file);  
  36.             IndexWriter writer = new IndexWriter(directory, analyzer, true,IndexWriter.MaxFieldLength.LIMITED);  
  37.             ArrayList<String> lisId = xml.getId();  
  38.             ArrayList<String> lisTitle = xml.getTitle();  
  39.             ArrayList<String> lisKeyWords = xml.getKeyWords();  
  40.             ArrayList<String> lisKind = xml.getKind();  
  41.             ArrayList<String> lisDescribe = xml.getDescribe();  
  42.             ArrayList<String> lisDate = xml.getDate();  
  43.             ArrayList<String> lisUrl = xml.getUrl();  
  44.             ArrayList<String> lisAuthor = xml.getAuthor();  
  45.             ArrayList<String> lisPublisher = xml.getPublisher();  
  46.           
  47.             //System.out.println(lisUrl.get(5));  
  48.             for (int i = 0; i < xml.getCount();i++){  
  49.                 Document doc = new Document();  
  50.                 //为ID创建Field   
  51.                   
  52.                 Field field = new Field("id",lisId.get(i),Field.Store.YES,Field.Index.NOT_ANALYZED );  
  53.                 doc.add(field);  
  54.                 //为title创建索引   
  55.                   
  56.                 field = new Field("title",lisTitle.get(i),Field.Store.YES,Field.Index.ANALYZED);  
  57.                 doc.add(field);  
  58.                 //为keywords创建索引   
  59.                   
  60.                 field = new Field("keywords",lisKeyWords.get(i),Field.Store.YES,Field.Index.ANALYZED);  
  61.                 doc.add(field);  
  62.                 //为kind创建索引   
  63.                   
  64.                 field = new Field("kind",lisKind.get(i),Field.Store.YES,Field.Index.NOT_ANALYZED);  
  65.                 doc.add(field);  
  66.                 //为describe创建索引   
  67.                   
  68.                  field = new Field("describe",lisDescribe.get(i),Field.Store.YES,Field.Index.ANALYZED);  
  69.                 doc.add(field);  
  70.                 //为data创建索引   
  71.                   
  72.                 field = new Field("date",lisDate.get(i),Field.Store.YES,Field.Index.NOT_ANALYZED);  
  73.                 doc.add(field);  
  74.                 //为URL创建索引   
  75.                   
  76.                 field = new Field("url",lisUrl.get(i),Field.Store.YES,Field.Index.NOT_ANALYZED);  
  77.                 doc.add(field);  
  78.                 //为author创建索引   
  79.                   
  80.                 field = new Field("author",lisAuthor.get(i),Field.Store.YES,Field.Index.NOT_ANALYZED);  
  81.                 doc.add(field);  
  82.                 //为publisher创建索引   
  83.                   
  84.                 field = new Field("publisher",lisPublisher.get(i),Field.Store.YES,Field.Index.NOT_ANALYZED);  
  85.                 doc.add(field);  
  86.                   
  87.                                 }  
  88.                   
  89.                 writer.addDocument(doc);  
  90.             }     
  91.               
  92.               
  93.               
  94.               
  95.              writer.close();  
  96.              //directory.close();   
  97.             System.out.println("索引创建完毕");  
  98.               
  99.               
  100.         }  catch (Exception e){  
  101.             e.printStackTrace();  
  102.           
  103.         }  
  104.           
  105.     }  
  106.     
  107.     public static void main(String [] args) throws DocumentException{  
  108.         CreatIndex index = new CreatIndex();  
  109.         index.creatIndex();  
  110.     }  
  111. }  


 

    这里不多说,最上面的每个list里面都藏有巨大的信息,都是一些字符串,就当是放到容器里的字符窜吧,然后下面的建立索引的过程都是一样的,代码比较短,就不需要什么注释了,呵呵
原创粉丝点击