luceneRAM索引

问题描述

packagechapter5;importjava.io.IOException;importjava.io.File;importjava.io.FileReader;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;importorg.apache.lucene.store.RAMDirectory;importorg.apache.lucene.util.Version;importorg.apache.lucene.document.Field;importorg.apache.lucene.document.Document;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.index.IndexWriter.MaxFieldLength;importorg.apache.lucene.analysis.standard.StandardAnalyzer;/********************************************************************本代码完成本地指定目录的遍历和文件查找。对指定后缀的文件进行分析,利用Lucene建立*索引,为后续检索使用做好准备。*******************************************************************/publicclassLuceneIndexLocalDisk{privatestaticStringDest_Index_Path="E:\workplace2\Lucenechapter2\workshop\TextIndex";privatestaticStringText_File_Path="E:\workplace2\Lucenechapter2\workshop\ch2\002\";/*========================================================*主函数,指定索引目录和待分析的目录,生成Lucene索引*========================================================*/publicstaticvoidmain(String[]args){Fileindexpath=newFile(Dest_Index_Path);FilelocalPath=newFile(Text_File_Path);try{intnums=indexBuilder(indexpath,localPath);System.out.println("IndexFinished"+nums+"docs");}catch(IOExceptione){e.printStackTrace();}}/*========================================================*索引创建函数,生成IndexWriter创建索引,调用子目录索引函数,并优化*存储本地磁盘索引*========================================================*/publicstaticintindexBuilder(FileindexPath,FilelocalPath)throwsIOException{if(!localPath.exists()||!localPath.isDirectory()||!localPath.canRead()){thrownewIOException(localPath+"不存在或者不允许访问");}System.out.println("目标路径完好");MaxFieldLengthmaxFieldLength=newMaxFieldLength(10000);IndexWriterFSWriter=newIndexWriter(FSDirectory.open(indexPath),newStandardAnalyzer(Version.LUCENE_CURRENT),true,maxFieldLength);FSWriter.setUseCompoundFile(true);SubindexBuilder(FSWriter,localPath);intnum=((Object)FSWriter).docCount();//这行在lucene3.0.3中有错请问怎么改呢FSWriter.optimize();FSWriter.close();returnnum;}/*========================================================*递归函数,递归分析目录,如果找到子目录,继续递归;如果找到文件分析索引*========================================================*/privatestaticvoidSubindexBuilder(IndexWriterfswriter,FilesubPath)throwsIOException{File[]filelist=subPath.listFiles();System.out.println(subPath.getAbsolutePath()+"路径个数"+filelist.length);for(inti=0;i<filelist.length;i++){Filefile=filelist[i];if(file.isDirectory()){SubindexBuilder(fswriter,file);}elseif(IsValidType(file.getName())){fileindexBuilder(fswriter,file);}}}/*========================================================*创建RAM内存索引,生成并添新文档。合并到本地磁盘索引当中*========================================================*/privatestaticvoidfileindexBuilder(IndexWriterfswriter,Filesubfile)throwsIOException{if(subfile.isHidden()||!subfile.exists()||!subfile.canRead()){return;}Directoryramdirectory=newRAMDirectory();MaxFieldLengthmaxFieldLength=newMaxFieldLength(10000);IndexWriterRAMWriter=newIndexWriter(ramdirectory,newStandardAnalyzer(Version.LUCENE_CURRENT),true,maxFieldLength);//Filefile=newFile(subfile);FileReaderfpReader=newFileReader(subfile);System.out.println("创建索引"+subfile.getCanonicalPath());Documentdocument=newDocument();Fieldfield_name=newField("name",subfile.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED);document.add(field_name);Fieldfield_path=newField("path",subfile.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED);document.add(field_path);Fieldfield_content=newField("content",fpReader);document.add(field_content);RAMWriter.addDocument(document);RAMWriter.close();fswriter.addIndexes(newDirectory[]{ramdirectory});}/*========================================================*判断当前文件名是否符合文件后缀要求*========================================================*/privatestaticbooleanIsValidType(Stringname){if(name.endsWith(".txt")||name.endsWith(".html")||name.endsWith(".ini")||name.endsWith(".conf")){returntrue;}else{returnfalse;}}}

时间: 2024-10-27 04:39:06

luceneRAM索引的相关文章

lucene 搜索-lucene对文件名、文件路径进行索引,搜索的时候不能检索出来

问题描述 lucene对文件名.文件路径进行索引,搜索的时候不能检索出来 如题,lucene对文件名.文件路径都进行了索引,因为文件名.文件路径都包含特殊字符斜杠(/)和点(.),导致搜索的时候输入文件名或者路径,都无法搜索,使用/对字符进行转义也不行,请帮忙. 部分代码如下: protected Document getDocument(File f) throws IOException { Document doc = new Document(); doc.add(new Field("

Apache索引目录浏览的学习笔记

 在浏览一些镜像文件站的时候,会发现网站目录是可以浏览文件(夹)列表的.举两个例子:网易开源镜像:Ubuntu.只要 Web 服务器是基于 Apache 的网站都可以开启或禁止索引(目录浏览),那么如何实现禁止和开启显示目录索引呢? 一.禁止 Apache 显示目录索引 方法1.修改Apache配置文件[httpd.conf] (1)目录配置 <Directory /home/www.111cn.net/teddysun"> #Options Indexes FollowSymLin

懒人促进社会进步 - 5种索引的原理和优化Case (btree,hash,gin,gist,brin)

标签 PostgreSQL , 多列聚合 , gin , btree , n_distinct , 选择性 , 如何选择索引方法(hash,btree,gin,gist,brin) , 如何优化索引 , 相关性 背景 在广告行业,精准营销是一个较热的话题,之前写过一个案例,如何使用PostgreSQL的array类型和GIN索引实时圈人的场景. <万亿级营销(圈人)迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计> 使用以上方法,程序需要作出一些调整(当然,如果用户原本就是Po

PostgreSQL 索引虚拟列 - 表达式索引 - JOIN提速

标签 PostgreSQL , join , 表达式索引 , 虚拟列索引 , 静态数据 , immutable函数 背景 CASE: 使用虚拟索引,响应时间从2.3秒下降到0.3毫秒 业务系统在设计时,为了减少数据冗余,提升可读性,通常需要将不同的数据放到不同的表. 在查询时,通过多表JOIN来补齐需要查询或在过滤的内容. 比如这样的例子: 有两张表,分别有1千万和100万数据,当用户查询时,需要补齐那100万表中的某个字段进行过滤. create table a (id int, bid in

乱序写入导致的索引膨胀(B-tree, GIN, GiST皆如此)

标签 PostgreSQL , 索引分裂 , 乱序写入 背景 有些场景,用户会发现重建索引,索引比原来更小. 通常这种情况是索引字段乱序写入,导致索引频繁分裂,使得索引页并不是百分百填满.膨胀使然. B-Tree索引 由于索引页中的数据是有序的,因此在乱序写入时,索引页可能出现分裂,分裂多了,空洞就会多起来(一页里面没有填满). 例子 1.先建索引,乱序写入. postgres=# create table t_idx_split(id int); CREATE TABLE postgres=#

java-用过LIRE的朋友,请问在建索引的时候能额外添加文本信息并在检索时可同时加入文本条件吗?

问题描述 用过LIRE的朋友,请问在建索引的时候能额外添加文本信息并在检索时可同时加入文本条件吗? 我为图像建立索引的时候,想对图像进行手动的分类,需要加入一些文字作为标签,然后在检索的时候可以加入标签文字以实现在一定范围内的图像检索. 我在建索引的时候,可以往DocumentBuilder创建的Document中添加额外的Field,这是没问题的.但在检索的时候,不知道如何为ImageSearcher添加文本条件,也没有发现提供这样的方法,请问有办法实现我的需求吗?

mysql索引与视图

  原始表student字段: ? 1 2 3 4 5 6 7 8 9 10 11 12 mysql> select column_name,data_type     -> from information_schema.columns     -> where table_name = 'student'; +-------------+-----------+ | column_name | data_type | +-------------+-----------+ | stu

如何监控ORACLE索引使用与否

在数据库管理与维护中,我们总会遇到一个问题:我们创建的索引是否会被某些 SQL语句使用呢?换个通俗表达方式:我创建的索引是否是未使用的索引(unused Indexes),是否有价值呢?如果创建的某个索引是Unused Indexes,尤其是没有合理规划索引的系统或那些管理控制不规范的系统.有可能建立了N个索引,其实有些索引都是没有任何SQL会使用,那么此时这些 多余的索引其实会带来两个问题:1:浪费存储空间,尤其是大表的索引,浪费的存储空间尤其可观: 2:加重DML操作(UPDATE.INSE

一个例子与InnoDB索引的几个概念

1.一个简单的sql语句问题     假设当前我们有一个表记录用户信息,结构如下:     a)      表结构 CREATE TABLE `u` (   `id` int(11) NOT NULL DEFAULT '0′,   `regdate` int(1) unsigned,   -..   PRIMARY KEY (`id`),   KEY `regdate` (`regdate`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk 说明:1) 由于需要按照注册时