ETJava Beta | Java    注册   登录
  • Lucene 文档维护

    发表于 2024-04-06 11:39:06     阅读(207)     博客类别:Lucene

    Lucene 文档维护

    添加文档域

    // 添加文档域
    private static void addDoc()throws Exception{
        // 定义索引库需要存放的目录
        Directory directory = FSDirectory.open(Paths.get("D://lucene02"));
        // 创建IndexWriter对象 使用中文分析器
        IndexWriter writer = new IndexWriter(directory,new IndexWriterConfig(new SmartChineseAnalyzer()));
        // 创建文档对象 Document
        Document document = new Document();
        // 创建文档域对象 并将其保存到文档对象中
        document.add(new StringField("fileName","测试文件名.txt", Field.Store.YES));
        document.add(new TextField("filePath","D://测试文件名.txt", Field.Store.YES));
        document.add(new StoredField("fileAuther","作者信息"));
        document.add(new TextField("content","文件内容。。。。。。。。", Field.Store.NO));
        // 将文档对象写入到索引库
        writer.addDocument(document);
        // 关闭索引库
        writer.close();
    }

    删除文档域

    删除文档分为全部删除和部分删除
    全部删除 直接使用indexWriter对象的deleteAll方法即可
    部分删除 需要指定删除条件
    	例如 删除文件内容包含xxx的文档
    		indexWriter.deleteDocuments(new Term("content","xxx"));
    		或是根据query查询的结果进行删除都可以
    		

    全部删除

    // 删除文档域 - 全部删除
    private static void delDoc1()throws Exception{
        // 定义索引库需要存放的目录
        Directory directory = FSDirectory.open(Paths.get("D://lucene02"));
        // 创建IndexWriter对象 使用中文分析器
        IndexWriter writer = new IndexWriter(directory,new IndexWriterConfig(new SmartChineseAnalyzer()));
        // 全部删除文档域
        writer.deleteAll();
        // 关闭资源
        writer.close();
    }

    指定条件删除

    // 删除文档域 - 根据查询条件删除
    private static void delDoc2()throws Exception{
        // 定义索引库需要存放的目录
        Directory directory = FSDirectory.open(Paths.get("D://lucene02"));
        // 创建IndexWriter对象 使用中文分析器
        IndexWriter writer = new IndexWriter(directory,new IndexWriterConfig(new SmartChineseAnalyzer()));
        // 根据查询结果删除文档域
        writer.deleteDocuments(new Term("content","内容"));
        writer.close();
    }

    修改文档域

    修改文档域 本质上是先删除后添加

     // 修改文档域
    private static void modifyDoc()throws Exception{
        // 创建文档对象并添加域
        Document document = new Document();
        document.add(new TextField("content","更新之后的内容", Field.Store.YES));
        document.add(new TextField("content2","更新之后的内容2", Field.Store.YES));
        document.add(new TextField("content3","更新之后的内容3", Field.Store.YES));
    
        // 定义索引库需要存放的目录
        Directory directory = FSDirectory.open(Paths.get("D://lucene02"));
        // 创建IndexWriter对象 使用中文分析器
        IndexWriter writer = new IndexWriter(directory,new IndexWriterConfig(new SmartChineseAnalyzer()));
        // 更新到索引库
        writer.updateDocument(new Term("content","内容"),document);
        writer.close();
    }