zoukankan      html  css  js  c++  java
  • 搜索引擎学习(五)Lucene操作索引

    一、代码分析

    /**
     * Lucene入门
     * 操作索引
     */
    public class ManageIndex {
    
        public IndexWriter getIndexWriter() throws Exception {
            //设置索引库的位置
            Directory directory = FSDirectory.open(new File("E:\zhanghaoBF\luceneSolr\indexLibrary").toPath());
            Analyzer analyzer = new StandardAnalyzer();//创建分词器对象(官方推荐标准分词器)
            IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);//设置使用的分词器
            return new IndexWriter(directory, indexWriterConfig);//索引对象
        }
    
        /**
         * 全删除(PS:索引里面的文档也会删掉)
         *
         * @throws Exception
         */
        @Test
        public void deleteAllIndex() throws Exception {
            IndexWriter indexWriter = getIndexWriter();//获取索引的流对象
            indexWriter.deleteAll();//删除全部索引
            indexWriter.close();//关流
        }
    
        /**
         * 按条件删除(PS:索引里面的文档也会删掉)
         *
         * @throws Exception
         */
        @Test
        public void deleteIndex() throws Exception {
            IndexWriter indexWriter = getIndexWriter();//获取索引的流对象
            Query query = new TermQuery(new Term("fileContent", "lucene"));//PS:TermQuery为精准匹配
            indexWriter.deleteDocuments(query);//按条件删除索引
            indexWriter.close();//关流
        }
    
        /**
         * 修改(PS:先删除后新增,与数据库里面的修改不一样,注意区分)
         *
         * @throws Exception
         */
        @Test
        public void updateIndex() throws Exception {
            //获取索引的流对象
            IndexWriter indexWriter = getIndexWriter();
    
            //构建一个文档对象
            Document doc = new Document();
            doc.add(new TextField("fileName", "新的文件名称", Field.Store.YES));
            doc.add(new TextField("fileContent", "新的文件内容", Field.Store.YES));
    
            //调用更新操作,先把符合条件的索引删掉(包括term和存在索引库的文档),然后把刚才新增的文档对象加入到索引库中
            indexWriter.updateDocument(new Term("fileName", "是"), doc);//按条件删除索引,再加入新的索引
            //PS:删掉的文档还是会占用对应的文档ID,新增的文档排在最后(和数据库ID自增时的删除再添加一个道理)
    
            //关流
            indexWriter.close();
        }
    }

    二、注意事项

    1、删除的时候,索引库里对应ID下的term和文档都会删除

    2、修改操作其实是先把符合条件的term和文档都会删掉,然后再加入新的文档。

    3、删掉的文档,文档ID不会释放,还是被占用的。

    4、流用完一定要记得关。

  • 相关阅读:
    android基本控件学习-----Date&Time
    android基本控件学习-----ScrollView
    android基本控件学习-----SeekBar&RatingBar
    android基本控件学习-----ProgressBar
    android基本控件学习-----ToggleButton&Switch
    android基本控件学习-----RadioButton&CheckBox
    android基本控件学习-----ImageView
    android基本控件学习-----Button
    android基本控件学习-----EditText
    android基本控件学习-----TextView
  • 原文地址:https://www.cnblogs.com/riches/p/11450606.html
Copyright © 2011-2022 走看看