A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Lucene是一套用于全文检索和搜寻的开放源码程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费java资讯检索程式库。人们经常提到资讯检索程式库,就像是搜寻引擎,但是不应该将资讯检索程式库与网搜索引擎相混淆。

下面是一个简单的lucene索引创建及追加的代码
Java代码  [url=][/url]

  • IndexWriter writer = null;  
  •         try{  
  •             File root = new File(indexPath);         
  •             if (root == null || root.listFiles() == null || root.listFiles().length == 0) {  
  •                 System.out.println("----------begin index-----------");  
  •                 writer = new IndexWriter(indexPath, new StandardAnalyzer(),  
  •                         true);  
  •             } else {  
  •                 System.out.println("----------append index-----------");  
  •                 writer = new IndexWriter(indexPath, new StandardAnalyzer(),  
  •                         false);  
  •             }  
  •             TopicDetail td = new TopicDetail();  
  •                            Document doc = new Document();     
  •             doc.add(new Field("tid", String.valueOf(td.getTopicID()), Field.Store.YES, Field.Index.TOKENIZED));  
  •             doc.add(new Field("pid", String.valueOf(td.getPID()),Field.Store.YES, Field.Index.TOKENIZED));  
  •             doc.add(new Field("mtitle", td.getTopicTitle(), Field.Store.YES, Field.Index.TOKENIZED));  
  •             doc.add(new Field("mauthor", td.getTopicAuthor(), Field.Store.YES, Field.Index.TOKENIZED));  
  •             doc.add(new Field("mtime", td.getTopicPostTime(), Field.Store.YES, Field.Index.UN_TOKENIZED));  
  •             doc.add(new Field("mcontent", td.getTopicContent(), Field.Store.YES, Field.Index.TOKENIZED));  
  •             doc.add(new Field("murl", td.getUrl(), Field.Store.YES, Field.Index.TOKENIZED));  
  • writer.addDocument(doc);  
  •   
  •             System.out.println("正在对索引进行优化...");  
  •             writer.optimize();  
  •             System.out.println("优化完毕!");  
  •             System.out.println("正在关闭索引读写器...");  
  •             writer.close();  
  •             System.out.println("索引读写器已经关闭!");            
  •         }catch(Exception e){  
  •             e.printStackTrace();  
  •         }finally{  
  •             try {  
  •                 writer.close();  
  •             } catch (CorruptIndexException e) {  
  •                 // TODO Auto-generated catch block  
  •                 e.printStackTrace();  
  •             } catch (IOException e) {  
  •                 // TODO Auto-generated catch block  
  •                 e.printStackTrace();  
  •             }  
  •         }  



这段代码主要处理的是索引的创建以及追加的过程,如果只是平常的应用,我觉得有这些代码已经足够了。
在new 一个filed的时候,Field.Store 表示“是否存储”,即该Field内的信息是否要被原封不动的保存在索引中。
Field.Index 表示“是否索引”,即在这个Field中的数据是否在将来检索时需要被用户检索到,一个“不索引”的Field通常仅是提供辅助信息储存的功能。

Store
       COMPRESS:压缩保存。用于长文本或二进制数据
        YES:保存
        NO:不保存
Index
       NO:不建索引
        TOKENIZED:分词,建索引
        UN_TOKENIZED:不分词,建索引
        NO_NORMS:不分词,建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间

需要注意的是,如果你查询的时候需要对某个字段进行排序,那么这个指定的字段必须为field.index.un_tokenized,否则查询会报错

1 个回复

倒序浏览
看着有点晕 很厉害呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马