分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

lucene_03_索引的增删改查

发布时间:2023-09-06 01:47责任编辑:林大明关键词:暂无标签

lucene索引的添加见 http://www.cnblogs.com/getchen/p/8615276.html 入门代码。

公共代码

 ?public <T extends Query> void printResult(Query query) throws Exception{ ???????IndexSearcher indexSearcher = getIndexSearcher(); ???????TopDocs topDocs = indexSearcher.search(query, 10); ???????ScoreDoc[] scoreDocs = topDocs.scoreDocs; ???????int i=0; ???????for (ScoreDoc doc : scoreDocs) { ???????????int docIndex = doc.doc; ???????????Document document = indexSearcher.doc(docIndex); ???????????String fileName = document.get("fileName"); ???????????System.out.println(fileName); ???????????String fileSize = document.get("fileSize"); ???????????System.out.println("size:=="+fileSize); ???????????String filePath = document.get("filePath"); ???????????System.out.println(filePath); ???????????String fileContent = document.get("fileContent"); ???????????System.out.println(fileContent); ???????????System.out.println("==========="+ ++i +"==============="); ???????} ???????indexSearcher.getIndexReader().close(); ???} public IndexSearcher getIndexSearcher() throws Exception{ ?????// ?第一步: 创建一个Directory 对象,也就是索引库存放的位置。 ???????Directory directory = FSDirectory.open(new File("F:\\lucene\\indexDatabase"));// ???????第二步: 创建一个indexReader 对象,需要指定Directory 对象。 ???????IndexReader indexReader = DirectoryReader.open(directory);// ???????第三步: 创建一个indexsearcher 对象,需要指定InclexReader 对象。 ???????IndexSearcher indexSearcher = new IndexSearcher(indexReader); ???????return indexSearcher; ???}

lucene索引的查询

查询全部

 @Test ???public void queryAll() throws Exception{ ???????Query query = new MatchAllDocsQuery(); ???????printResult(query); ???}

区间查询

 ???@Test ???public void queryRange() throws Exception{ ???????Query query = ?NumericRangeQuery.newLongRange("fileSize",0L,800L,true,true); ???????printResult(query); ???}

组合条件查询

 ???/** ????* 组合条件查询 ????*/ ???@Test ???public void queryBoolean() throws Exception{ ???????BooleanQuery query = new BooleanQuery(); ???????TermQuery query1 = new TermQuery(new Term("fileName", "java")); ???????TermQuery query2 = new TermQuery(new Term("fileName", "lucene")); ???????query.add(query1, BooleanClause.Occur.MUST); ???????query.add(query2, BooleanClause.Occur.MUST);// ???????Query query3 = query; ???????printResult(query); ???}

其中BooleanClause.Occur 中有三个选项:MUST,NOT_MUST,SHOULD.等同于数据库中的and,not,or


lucene索引的添加
//增 ???@Test ???public void add() throws ?Exception{ ???????IndexWriter indexWriter = getIndexWriter(); ???????Document document = new Document(); ???????document.add(new TextField("fileContent","电话号码", Field.Store.YES)); ???????indexWriter.addDocument(document); ???????indexWriter.close(); ???}

lucene 索引的更新

 /** ????* 更新:删除原有的并增加需要更改的。 ????* 删掉一个添加一个 ????* @throws Exception ????*/ ???@Test ???public void update() throws Exception{ ???????IndexWriter indexWriter = getIndexWriter(); ???????Term term = new Term("fileContent", "电话号码"); ?????/* ?Document document = new Document(); ???????document.add(new TextField("fileContent","电话号码1", Field.Store.YES));*/ ???????Document document = getDocumentByFile(new File("F:\\lucene\\test.txt")); ???????indexWriter.updateDocument(term,document,new IKAnalyzer()); ???????indexWriter.close(); ???} ???public Document getDocumentByFile(File file) throws Exception{ ???????Document document = new Document(); ???????//获取文件的名称 ???????String fileName = file.getName(); ???????//创建textfield,保存文件名(key,value,是否存储) ???????TextField fileNameField = new TextField("fileName",fileName, Field.Store.YES); ???????//文件大小 ???????long fileSize = FileUtils.sizeOf(file);// ???????????????NumericDocValuesField fileSizeField = new NumericDocValuesField("fileSize", fileSize); ???????System.out.println(fileSize);// ???????????????SortedNumericDocValuesField fileSizeField = new SortedNumericDocValuesField("fileSize", fileSize);// ???????????????LongPoint fileSizeField = new LongPoint("fileSize", fileSize); ???????StringField fileSizeField = new StringField("fileSize", String.valueOf(fileSize), Field.Store.YES); ???????//文件路径 ???????String filePath = file.getPath(); ???????StoredField filePathField = new StoredField("filePath", filePath); ???????//文件内容 ???????String fileContent = FileUtils.readFileToString(file,"gbk"); ???????TextField fileContentField = new TextField("fileContent", fileContent, Field.Store.YES); ???????document.add(fileNameField); ???????document.add(fileSizeField); ???????document.add(filePathField); ???????document.add(fileContentField); ???????return document; ???}

lucene索引的删除

 ?//删除全部 ???@Test ???public ?void deleteAll() throws Exception{ ???????IndexWriter indexWriter = getIndexWriter(); ???????indexWriter.deleteAll(); ???????indexWriter.close(); ???} ???//删除部分 ???@Test ???public void delete() throws ?Exception{ ???????IndexWriter indexWriter = getIndexWriter(); ???????Term term = new Term("fileContent", "电话号码"); //索引文件中包含的有电话号码,分词器也分析出了电话号码一词,删除之后就无法通过该关键词索引到文件了。 ???????indexWriter.deleteDocuments(term); ???????indexWriter.close(); ???}

lucene_03_索引的增删改查

原文地址:https://www.cnblogs.com/getchen/p/8690153.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved