• Lucene 4.4 依据Int类型字段删除索引


    1、方法一,通过Term删除
    Term构造中没有。Int类型须要转换成Lucene自带的类BytesRef 。
        
        /**
         * 依据商品ID删除索引文件
         * @param id
         */
        public void deleteDocument(int id)
        {;
            File file = new File("E://index");
            IKAnalyzer analyzer = new IKAnalyzer();
            IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_44, analyzer);
            IndexWriter indexWriter = null;
            Directory directory;
            try {
                directory = FSDirectory.open(file);
                // 创建 IndexWriter
                indexWriter = new IndexWriter(directory, indexWriterConfig);
    	  	   		BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT);
                        		NumericUtils.intToPrefixCoded(id, 0, bytes);
                        		Term term = new Term(field, bytes);
    
               
                indexWriter.deleteDocuments(term);
                indexWriter.close();
               
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
               
        }
    
    2.方法二,使用NumericRangeQuery
    
    /**
         * 依据商品ID删除索引文件
         * @param id
         */
        public void deleteDocument(int id)
        {;
            File file = new File("E://index");
    
    
            IKAnalyzer analyzer = new IKAnalyzer();
            IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_44, analyzer);
    
    
            IndexWriter indexWriter = null;
            
    
    
            Directory directory;
            try {
                 directory = FSDirectory.open(file);
                 // 创建 IndexWriter
                 indexWriter = new IndexWriter(directory, indexWriterConfig);
    	  	   		Query numbericRangeQuery = NumericRangeQuery.newIntRange("ID",id-1, id+1, false, false);	            
                 indexWriter.deleteDocuments(numbericRangeQuery);
                 indexWriter.close();
                
                 } catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                 }           
               
        }
    


  • 相关阅读:
    Variant 数组
    socket c/s分佈式編程
    多線程幾個方法說明
    hash表的使用
    MIS系统权限控制的一个简便方法
    git 使用总结
    让 VAGRANT 启动并运行起来
    深入理解 Laravel 中 config 配置加载原理
    Vagrant入门
    php开发APP接口(总结一)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5276443.html
Copyright © 2020-2023  润新知