• Lucene之索引库的维护:添加,删除,修改


    索引添加

    Field域属性分类
    添加文档的时候,我们文档当中包含多个域,那么域的类型是我们自定义的,上个案例使用的TextField域,那么这个域他会自动分词,然后存储
    我们要根据数据类型和数据的用途合理的选择合适的域
    Field类:
    StringField(fieldName,fieldValue,Stroe.YES/NO) 存储的数据类型为字符串,包含索引,是否存储根据Stroe定义,不会经过分析器
    StroeField(fieldName,fieldValue) 支持多种数据类型,不分析,不建立索引,默认保存到索引库当中
    LongPoint(name,value) 会进行分析,会创建索引,但是不会保存到索引库当中
    TextField(fieldName,fieldValue,Stroe.YES/NO) 会分析,会创建索引,是否保存取决Stroe

    添加代码

       @Test
        //Field域索引添加
        public void createDocument() throws IOException {
            //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
            IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("D:\Luene资料\IndexD:\Luene资料\Index").toPath()),
                    new IndexWriterConfig(new IKAnalyzer()));
            //创建一个文档对象
            Document document=new Document();
            document.add(new TextField("fieldName","hehe.txt", Field.Store.YES));
            document.add(new StoredField("fieldPath","c://hehe.txt"));
            document.add(new LongPoint("fieldSize",123));
            document.add(new StoredField("fieldSize",123));
            document.add(new TextField("fieldContent","ojdbc14和ikanalyzer的maven找不到的解决办法,手动发布oJdbc14到maven仓库,手动发布ikanalyzer到maven,同时本教程适用于所有jar包发布 下载 IKAnalyzer结合Lucene使用和单独使用例子 简单性能测试 11-26 阅读数 1890 IKAnalyzer是一个开源基于JAVA语言的 .", Field.Store.YES));
            //创建索引,将文档添加到索引库当中
            indexWriter.addDocument(document);
            //关闭
            indexWriter.close();
        }
    

      

    效果:创建成功使用luke工具查看

    索引修改

    修改索引的原理:先删除后添加

    修改代码

     /**
         * 索引修改,修改fieldName域中关键词匹配到全文检索的文档
         */
        public static void main(String[] args) throws IOException {
            //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
            IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("D:\Luene资料\Index").toPath()),
                    new IndexWriterConfig(new IKAnalyzer()));
    
            //创建文档
            Document document=new Document();
            document.add(new TextField("fieldName","new.txt", Field.Store.YES));
            document.add(new StoredField("fieldPath","c://new.txt"));
            document.add(new LongPoint("fieldSize",456));
            document.add(new StoredField("fieldSize",456));
            document.add(new TextField("fieldContent","修改fieldName为全文检索的文档,进行文档替换,先删除掉fieldName为全文检索的两个文档,再添加一个fileName为new的新文档", Field.Store.YES));
    
            //修改  参数一为条件  参数二为修改的文档值
            indexWriter.updateDocument(new Term("fieldName","全文检索"),document);
    
            //关闭
            indexWriter.close();
        }
    

      

    效果:使用luke工具查看

    索引删除

    删除全部

     

    /**
     * 删除全部
     * @throws IOException
     */
    @Test
    public void deleteAllDocument() throws IOException {
        //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
        IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("D:\Luene资料\Index").toPath()),
                new IndexWriterConfig(new IKAnalyzer()));
    
        //删除索引
        indexWriter.deleteAll();
        //关闭
        indexWriter.close();
    }
    

      

    效果: 

    说明:将索引目录的索引信息全部删除,直接彻底删除,无法恢复。

    根据域和关键词指定删除

        /**
         * 根据域和关键词进行删除
         * @throws IOException
         */
        @Test
        public void deleteByFieldAndTermDocument() throws IOException {
            //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
            IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("D:\Luene资料\Index").toPath()),
                    new IndexWriterConfig(new IKAnalyzer()));
            //定义一个删除条件,定义一个查询对象
            Query query=new TermQuery(new Term("fieldName","全文检索"));
            //删除
            indexWriter.deleteDocuments(query);
            //关闭
            indexWriter.close();
        }
    
  • 相关阅读:
    《C++ Primer》笔记string,vector
    《C++ Primer》笔记创建动态数组new,delete
    《C++ Primer》笔记迭代器iterator
    浅析jQuery基础框架
    linux常用命令
    Javascript常用对象详细讲解
    Javascript兼容多种浏览器
    Vim常用命令
    提高 web 应用性能之 JavaScript 性能调优
    jQuery LigerUI使用教程入门篇
  • 原文地址:https://www.cnblogs.com/wishsaber/p/12362220.html
Copyright © 2020-2023  润新知