lucene--Field.Store解析

Store 
      COMPRESS:压缩保存。用于长文本或二进制数据 
      YES:保存 
      NO:不保存 
具体理解当然是给出示例了: 
Java代码    收藏代码
  1. package demo.first;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  6. import org.apache.lucene.document.Document;  
  7. import org.apache.lucene.document.Field;  
  8. import org.apache.lucene.document.Field.Index;  
  9. import org.apache.lucene.document.Field.Store;  
  10. import org.apache.lucene.index.CorruptIndexException;  
  11. import org.apache.lucene.index.IndexWriter;  
  12. import org.apache.lucene.queryParser.ParseException;  
  13. import org.apache.lucene.queryParser.QueryParser;  
  14. import org.apache.lucene.search.Hits;  
  15. import org.apache.lucene.search.IndexSearcher;  
  16. import org.apache.lucene.store.LockObtainFailedException;  
  17.   
  18. public class TestFieldStore {  
  19.     /** 
  20.      * 索引文件的存放位置 
  21.      */  
  22.     String path = "D://workspace//fwk//lucenedemo//firstLuceneIndex";  
  23.       
  24.     public void createLuceneIndex(){  
  25.         try {  
  26.             IndexWriter iw = new IndexWriter(path,new StandardAnalyzer(),true);  
  27.             Document doc = new Document();  
  28.             //Store.YES 保存 可以查询 可以打印内容  
  29.             Field storeYes = new Field("storeyes","storeyes",Store.YES,Index.TOKENIZED);  
  30.             //Store.NO 不保存 可以查询 不可打印内容 由于不保存内容所以节省空间  
  31.             Field storeNo = new Field("storeno","storeno",Store.NO,Index.TOKENIZED);  
  32.             //Store.COMPRESS 压缩保存 可以查询 可以打印内容 可以节省生成索引文件的空间         Field storeCompress = new Field("storecompress","storecompress",Store.COMPRESS,Index.TOKENIZED);  
  33.             doc.add(storeYes);  
  34.             doc.add(storeNo);  
  35.             doc.add(storeCompress);  
  36.             iw.addDocument(doc);  
  37.             iw.optimize();  
  38.             iw.close();  
  39.         } catch (CorruptIndexException e) {  
  40.             // TODO Auto-generated catch block  
  41.             e.printStackTrace();  
  42.         } catch (LockObtainFailedException e) {  
  43.             // TODO Auto-generated catch block  
  44.             e.printStackTrace();  
  45.         } catch (IOException e) {  
  46.             // TODO Auto-generated catch block  
  47.             e.printStackTrace();  
  48.         }  
  49.     }  
  50.       
  51.     public void testSearch(){  
  52.         try {  
  53.             IndexSearcher iser = new IndexSearcher(path);  
  54.   
  55.             /* 
  56.              * Store.YES 采用保存模式,可以查询到,并且可以打印出内容 
  57.              */  
  58.             System.out.println("---storeYes");  
  59.             QueryParser queryParser1 = new QueryParser("storeyes",new StandardAnalyzer());  
  60.             Hits hits1 = iser.search(queryParser1.parse("storeyes"));  
  61.             for(int i = 0;i<hits1.length();i++){  
  62.                 System.out.println("id :"+hits1.id(i));  
  63.                 System.out.println("doc :"+hits1.doc(i));  
  64.                 System.out.println("context :"+hits1.doc(i).get("storeyes"));  
  65.                 System.out.println("score :"+hits1.score(i));  
  66.             }  
  67.               
  68.             /* 
  69.              * Store.NO 采用不保存模式,可以查询到,但是不能打印出内容 
  70.              */  
  71.             System.out.println("---storeNo");  
  72.             QueryParser queryParser2 = new QueryParser("storeno",new StandardAnalyzer());  
  73.             Hits hits2 = iser.search(queryParser2.parse("storeno"));  
  74.             for(int i = 0;i<hits2.length();i++){  
  75.                 System.out.println("id :"+hits2.id(i));  
  76.                 System.out.println("doc :"+hits2.doc(i));  
  77.                 System.out.println("context :"+hits2.doc(i).get("storeno"));  
  78.                 System.out.println("score :"+hits2.score(i));  
  79.             }  
  80.               
  81.             /* 
  82.              * Store.COMPRESS 采用压缩保存模式,可以查询到,并且可以打印出内容 
  83.              */  
  84.             System.out.println("---storeCompress");  
  85.             QueryParser queryParser3 = new QueryParser("storecompress",new StandardAnalyzer());  
  86.             Hits hits3 = iser.search(queryParser3.parse("storecompress"));  
  87.             for(int i = 0;i<hits3.length();i++){  
  88.                 System.out.println("id :"+hits3.id(i));  
  89.                 System.out.println("doc :"+hits3.doc(i));  
  90.                 System.out.println("context :"+hits3.doc(i).get("storecompress"));  
  91.                 System.out.println("score :"+hits3.score(i));  
  92.             }  
  93.               
  94.             iser.close();  
  95.         } catch (CorruptIndexException e) {  
  96.             // TODO Auto-generated catch block  
  97.             e.printStackTrace();  
  98.         } catch (IOException e) {  
  99.             // TODO Auto-generated catch block  
  100.             e.printStackTrace();  
  101.         } catch (ParseException e) {  
  102.             // TODO Auto-generated catch block  
  103.             e.printStackTrace();  
  104.         }  
  105.     }  
  106.       
  107.     public static void main(String[] args) {  
  108.         TestFieldStore tfs = new TestFieldStore();  
  109.         tfs.createLuceneIndex();  
  110.         tfs.testSearch();  
  111.     }  
  112. }  

由此可以看出Field.Store的设置与否与是否可以搜索到无关。 
这里整理一下 
Field.Store 
     :YES 可以搜索,保存原值 
      :NO  可以搜索,不保存原值 
     :COMPRESS 可以搜索,压缩保存原值 
这里需要注意的是在实际使用中,并不建议使用COMPRESS,存在压缩和解压过程,效率低下,对于大文本尽量使用NO 
还有一点就是是否可被搜索与Store无关,只与Index有关。 
这里使用的是lucene 2.3.2 
本系列教程如果没有明确指出都是沿用此版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值