zoukankan      html  css  js  c++  java
  • lucene-Field.Store解析

    本文主要内容装载这里

    Store 三种形态

          COMPRESS:压缩保存。用于长文本或二进制数据 (后期高版本舍弃了)
          YES:保存 
          NO:不保存 

    具体案例

    package demo.first;
    
    import java.io.IOException;
    
    import org.apache.lucene.analysis.standard.StandardAnalyzer;
    import org.apache.lucene.document.Document;
    import org.apache.lucene.document.Field;
    import org.apache.lucene.document.Field.Index;
    import org.apache.lucene.document.Field.Store;
    import org.apache.lucene.index.CorruptIndexException;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.queryParser.ParseException;
    import org.apache.lucene.queryParser.QueryParser;
    import org.apache.lucene.search.Hits;
    import org.apache.lucene.search.IndexSearcher;
    import org.apache.lucene.store.LockObtainFailedException;
    
    public class TestFieldStore {
        /**
         * 索引文件的存放位置
         */
        String path = "D://workspace//fwk//lucenedemo//firstLuceneIndex";
        
        public void createLuceneIndex(){
            try {
                IndexWriter iw = new IndexWriter(path,new StandardAnalyzer(),true);
                Document doc = new Document();
                //Store.YES 保存 可以查询 可以打印内容
                Field storeYes = new Field("storeyes","storeyes",Store.YES,Index.TOKENIZED);
                //Store.NO 不保存 可以查询 不可打印内容 由于不保存内容所以节省空间
                Field storeNo = new Field("storeno","storeno",Store.NO,Index.TOKENIZED);
                //Store.COMPRESS 压缩保存 可以查询 可以打印内容 可以节省生成索引文件的空间            Field storeCompress = new Field("storecompress","storecompress",Store.COMPRESS,Index.TOKENIZED);
                doc.add(storeYes);
                doc.add(storeNo);
                doc.add(storeCompress);
                iw.addDocument(doc);
                iw.optimize();
                iw.close();
            } catch (CorruptIndexException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (LockObtainFailedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        public void testSearch(){
            try {
                IndexSearcher iser = new IndexSearcher(path);
    
                /*
                 * Store.YES 采用保存模式,可以查询到,并且可以打印出内容
                 */
                System.out.println("---storeYes");
                QueryParser queryParser1 = new QueryParser("storeyes",new StandardAnalyzer());
                Hits hits1 = iser.search(queryParser1.parse("storeyes"));
                for(int i = 0;i<hits1.length();i++){
                    System.out.println("id :"+hits1.id(i));
                    System.out.println("doc :"+hits1.doc(i));
                    System.out.println("context :"+hits1.doc(i).get("storeyes"));
                    System.out.println("score :"+hits1.score(i));
                }
                
                /*
                 * Store.NO 采用不保存模式,可以查询到,但是不能打印出内容
                 */
                System.out.println("---storeNo");
                QueryParser queryParser2 = new QueryParser("storeno",new StandardAnalyzer());
                Hits hits2 = iser.search(queryParser2.parse("storeno"));
                for(int i = 0;i<hits2.length();i++){
                    System.out.println("id :"+hits2.id(i));
                    System.out.println("doc :"+hits2.doc(i));
                    System.out.println("context :"+hits2.doc(i).get("storeno"));
                    System.out.println("score :"+hits2.score(i));
                }
                
                /*
                 * Store.COMPRESS 采用压缩保存模式,可以查询到,并且可以打印出内容
                 */
                System.out.println("---storeCompress");
                QueryParser queryParser3 = new QueryParser("storecompress",new StandardAnalyzer());
                Hits hits3 = iser.search(queryParser3.parse("storecompress"));
                for(int i = 0;i<hits3.length();i++){
                    System.out.println("id :"+hits3.id(i));
                    System.out.println("doc :"+hits3.doc(i));
                    System.out.println("context :"+hits3.doc(i).get("storecompress"));
                    System.out.println("score :"+hits3.score(i));
                }
                
                iser.close();
            } catch (CorruptIndexException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {
            TestFieldStore tfs = new TestFieldStore();
            tfs.createLuceneIndex();
            tfs.testSearch();
        }
    }

    由此可以看出Field.Store的设置与否与是否可以搜索到无关。 
    这里整理一下 

    Field.Store 
         :YES 可以搜索,保存原值 
          :NO  可以搜索,不保存原值 
         :COMPRESS 可以搜索,压缩保存原值 


    这里需要注意的是在实际使用中,并不建议使用COMPRESS,存在压缩和解压过程,效率低下,对于大文本尽量使用NO 
    还有一点就是是否可被搜索与Store无关,只与Index有关。 
    这里使用的是lucene 2.3.2 

  • 相关阅读:
    Python学习 :面向对象 -- 三大特性
    Python学习 :面向对象(一)
    小米oj #40 找小“3”
    第三次作业
    排序算法模板
    树状数组求逆序数
    最短路模板
    字典树模板
    LCS
    多项式朴素乘法
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/5228971.html
Copyright © 2011-2022 走看看