索引添加
Field域属性分类
添加文档的时候,我们文档当中包含多个域,那么域的类型是我们自定义的,上个案例使用的TextField域,那么这个域他会自动分词,然后存储
我们要根据数据类型和数据的用途合理的选择合适的域
Field类:
StringField(fieldName,fieldValue,Stroe.YES/NO) 存储的数据类型为字符串,包含索引,是否存储根据Stroe定义,不会经过分析器
StroeField(fieldName,fieldValue) 支持多种数据类型,不分析,不建立索引,默认保存到索引库当中
LongPoint(name,value) 会进行分析,会创建索引,但是不会保存到索引库当中
TextField(fieldName,fieldValue,Stroe.YES/NO) 会分析,会创建索引,是否保存取决Stroe
添加代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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工具查看
索引修改
修改索引的原理:先删除后添加
修改代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /** * 索引修改,修改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工具查看
索引删除
删除全部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * 删除全部 * @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(); } |
效果:
说明:将索引目录的索引信息全部删除,直接彻底删除,无法恢复。
根据域和关键词指定删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /** * 根据域和关键词进行删除 * @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(); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步