博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lucene_03_索引的增删改查
阅读量:6330 次
发布时间:2019-06-22

本文共 4958 字,大约阅读时间需要 16 分钟。

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

 

公共代码

public 
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();    }

 

转载于:https://www.cnblogs.com/getchen/p/8690153.html

你可能感兴趣的文章
HDU 1255 覆盖的面积(矩形面积交)
查看>>
Combinations
查看>>
SQL数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。...
查看>>
第二十一章流 3用cin输入
查看>>
在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
查看>>
获取SQL数据库中的数据库名、所有表名、所有字段名、列描述
查看>>
Orchard 视频资料
查看>>
简述:预处理、编译、汇编、链接
查看>>
调试网页PAIP HTML的调试与分析工具
查看>>
路径工程OpenCV依赖文件路径自动添加方法
查看>>
玩转SSRS第七篇---报表订阅
查看>>
WinCE API
查看>>
POJ 3280 Cheapest Palindrome(DP 回文变形)
查看>>
oracle修改内存使用和性能调节,SGA
查看>>
SQL语言基础
查看>>
对事件处理的错误使用
查看>>
最大熵模型(二)朗格朗日函数
查看>>
深入了解setInterval方法
查看>>
html img Src base64 图片显示
查看>>
[Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction...
查看>>