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

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(全文检索)  搜索到俩个文档

执行条件删除后

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

时间: 2024-10-07 09:11:57

Lucene索引维护(添加、修改、删除)的相关文章

FileSystemObject组件新建读取添加修改删除功能实例

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>FileSystemObject组件应该实例</title> </head> <

【转】C#添加修改删除文件文件夹大全

[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt");sw.WriteLine("追逐理想");sw.WriteLine("kzlll");sw.WriteLine(".NET笔记");sw.Flush();sw.Close();C#拷贝文件string

动态添加修改删除html表格内容

1.需求 需要实现收银台上添加修改删除商品信息时顾显可以实时看到其变化 2.解决 收银台和顾显通过tcp传输进行数据通信,顾显通过操作html中的表格进行数据添加修改和删除操作 3.代码 mytest.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Dynamic Table<

Web 1三级联动 下拉框 2添加修改删除 弹框

Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { private MyDBDataContext _Context = new MyDBD

打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demoback.lalalaweb.com  前台:demo.lalalaweb.com 演示过程中可能会发现bug,希望即时留言反馈,谢谢 源码下载:https://github.com/sutianbinde/classweb               //不是全部的代码,每次更新博客才更新代码 学

列表的定义、索引、添加、删除、查找、排序

变量赋值 Python是一门弱变量的语言,它不用指定变量的类型,它的类型由值来决定. 变量赋值的方法: 1.  直接赋值 a = 1 2.  链式赋值 a = b = 1 3.  序列解包赋值 a,b = 1,2 注意:序列解包赋值变量和值的个数一定要一致 列表 列表是一个有序的.可修改的.元素以逗号分割,以中括号包围的序列. 列表定义的方法: 1.       list 2.  [] 3.  range 4.xrange 注意:在Python3中取消了xrange,但是range的效果和xra

web测试点整理(四) -- 添加/修改/删除功能

声明:是参考了很多他人的文章以及自己的一些经验做了总结,因为时间久远,也没有留下当时的参考链接,如果涉及引用别人的内容,请留言说明,谢谢 添加.修改 特殊键 是否支持Tab键 是否支持回车键 提示信息 不符合要求的地方是否有错误提示 唯一性 字段唯一的,是否可以重复添加,添加后是否能修改为已存在的字段(字段包括区分大小写以及在输入的内容前后输入空格,保存后,数据是否真的插入到数据库中,注意保存后数据的正确性) 数据正确性: 对编辑页的每个编辑项进行修改,点击保存,是否可以保存成功,检查相关联的数

Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracle支持的数据类型: 字符型 char 定长 最大2000个字符 char(10)----'小韩' 前四个字符放'小韩',后添加6个空格补全.(查询效率高) varchar2(20) 变长 最大4000个字符 vachar2(10)----'小韩' oracle分配四个字符,这样可以节省空间. clo

MySQL 字段常用操作 添加,修改,删除,调整字段顺序

整理备忘: 添加字段:alter table 表名Add column 字段名 字段类型  默认值 AFTER 字段名 (在哪个字段后面添加) 例子: alter table appstore_souapp_app_androidmarket Add column getPriceCurrency varchar(50) default null AFTER getPrice 修改字段:alter table表名change 字段名 新字段名 字段类型 默认值 例子: alter table a