zoukankan      html  css  js  c++  java
  • 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();
        }
    
  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/wishsaber/p/12362220.html
Copyright © 2011-2022 走看看