首页 > Web开发 > 详细

Lucene索引维护(添加、修改、删除)

时间:2020-02-25 20:43:50      阅读:74      评论:0      收藏:0      [点我收藏+]

1. Field域属性分类

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

2. 添加索引

@Test
    public void createDocument() throws IOException {
        //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
        IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\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();
    }

技术分享图片

 

 

3. 修改索引:原理-先删除再添加

/**
     * 索引修改,修改fieldName域中关键词匹配到全文检索的文档
     * @throws IOException
     */
    @Test
    public void updateDocument() throws IOException {
        //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
        IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\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();
    }

 

4.删除索引

4.1 删除全部:慎用

@Test
    public void deleteAllDocument() throws IOException {
        //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
        IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\Index").toPath()),
                new IndexWriterConfig(new IKAnalyzer()));

        //删除索引
        indexWriter.deleteAll();
        //关闭
        indexWriter.close();
    }

技术分享图片

 

 

4.2 根据域和关键词删除

/**
     * 根据域和关键词进行删除
     * @throws IOException
     */
    @Test
    public void deleteByFieldAndTermDocument() throws IOException {
        //创建IndexWriter对象   参数一:索引库位置   参数二:指定配置
        IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\Index").toPath()),
                new IndexWriterConfig(new IKAnalyzer()));

        //定义一个删除条件,定义一个查询对象
        Query query=new TermQuery(new Term("fieldName","全文检索"));
        //删除
        indexWriter.deleteDocuments(query);

        //关闭
        indexWriter.close();
    }

没有执行条件删除时一共15个文档

技术分享图片

 

readIndex(全文检索)  搜索到俩个文档

 技术分享图片

 

 执行条件删除后

技术分享图片

 

Lucene索引维护(添加、修改、删除)

原文:https://www.cnblogs.com/chx9832/p/12363320.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!