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

摘要:
当通过向索引中添加Field字段属性分类来添加文档时,我们的文档包含多个字段,因此字段的类型是自定义的。最后一种情况下使用的TextField字段将自动分段,然后存储。我们需要根据数据类型和数据的用途合理选择合适的字段字段类:StringField(fieldName,fieldValue,Stroe.YES/NO)存储的数据类型是字符串,包括索引,是否存储由Stroe定义,不会通过分析器Str

索引添加

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工具查看

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

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

索引修改

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

修改代码

 /**
     * 索引修改,修改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工具查看

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

索引删除

删除全部

 

/**
 * 删除全部
 * @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();
}

  

效果: 

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

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

根据域和关键词指定删除

    /**
     * 根据域和关键词进行删除
     * @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();
    }

免责声明:文章转载自《Lucene之索引库的维护:添加,删除,修改》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql的文件组成以及IO操作的流程Vue最简单的实现网页Live2D看板娘下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

六大开源搜索引擎工具

1. PhpDig PhpDig是一个采用PHP开发的Web爬虫和搜索引擎。通过对动态和静态页面进行索引建立一个词汇表。当搜索查询时,它将按一定的排序规则显示包含关键字的搜索结果页面。适用于专业化强、层次深的个性化搜索引擎。 2. Sphider Sphider是一个轻量级,采用PHP开发的web spider和搜索引擎,使用mysql来存储数据。可以利用...

Sqlserver:计算列

CREATE TABLE  CREATE TABLE   [ database_name.[ owner ] . | owner. ] table_name     ( { < column_definition >         | column_name AS computed_column_expression         | &...

[转]MS Sql 7105错误

转自:http://hi.baidu.com/ylj798/blog/item/4878077ab64fe7ea2f73b300.html 有的时候发现查询数据库会出现以下类似的提示: [Microsoft][ODBC SQL Server Driver][SQL Server]text、ntext 或 image 节点的页 (1:220),槽 14 不...

常用数据词典

视图家族 描述 COL_PRIVS 包含了表的列权限,包括授予者、被授予者和权限 EXTENTS 数据范围信息,比如数据文件,数据段名(segment_name)和大小 INDEXES 索引信息,比如类型、唯一性和被涉及的表 IND_COLUMNS 索引列信息,比如索引上的列的排序方式 OBJECTS 对象信息,比如状态和DDL time ROLE_PRI...

C# .Net List&amp;lt;T&amp;gt;中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List&amp;lt;T&amp;gt;删除汇总

在List<T>中删除主要有Remove()、RemoveAt()、RemoveRange()、RemoveAll()这几个方法。下面一一介绍使用方法和注意点。 我们以List<string>举例 var strList = new List<string> { "aa", "ba", "cc", "dd", "ee",...

美团点评面试20190515

1. 自我介绍 2. 项目介绍,项目难点 3. 笔试题研究过吗? 4. Mybatis多参数传递    //方法1:顺序(索引)传参法 public User selectUser(String name, int deptId); <select resultMap="UserResultMap"> select * fro...