Lucene学习笔记一(基础)
在创建索引的时候,
Field.Store,表示对域的存储
Field.Store.YES:存储字段值(未分词前的字段值)
Field.Store.NO:不存储,存储与索引没有关系
Field.Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损
Field.Index,表示对域的搜索
Field.Index.ANALYZED:分词建索引
Field.Index.ANALYZED_NO_NORMS:分词建索引,但是Field的值不像通常那样
被保存,而是只取一个byte,这样节约存储空间
Field.Index.NOT_ANALYZED:不分词且索引
Field.Index.NOT_ANALYZED_NO_NORMS:不分词建索引,Field的值去一个byte保存
TermVector表示文档的条目(由一个Document和Field定位)和它们在当前文档中所出现的次数
Field.TermVector.YES:为每个文档(Document)存储该字段的TermVector
Field.TermVector.NO:不存储TermVector
Field.TermVector.WITH_POSITIONS:存储位置
Field.TermVector.WITH_OFFSETS:存储偏移量
Field.TermVector.WITH_POSITIONS_OFFSETS:存储位置和偏移量
创建索引的简单示例:
/** * 创建索引(Indexing),生成索引文件 */ private static void createTextIndex() { // public final static String INDEX_SOURCE_DIR = "D:\\tomcat-7.0.22";// 要检索的文件夹 // // public final static String INDEX_STORE_DIR = "d:\\fileIndex";// 索引文件的存放位置 //获取要索引的文件 File baseDir = new File(INDEX_SOURCE_DIR); List<File> subFiles = new ArrayList<File>(); if (!baseDir.exists()) { System.out.println("不存在" + INDEX_SOURCE_DIR + "目录"); System.exit(1); } else if (baseDir.isDirectory()) { subFiles = FileUtils.searchFilesByType(baseDir, subFiles, ".html"); } //创建存放索引文件的目录 File indexDir = new File(INDEX_STORE_DIR); if (!indexDir.exists()) { indexDir.mkdir(); } //索引分析器 Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); //创建索引器(核心) IndexWriter indexWriter = null; long startTime = 0; try { indexWriter = new IndexWriter(FSDirectory.open(indexDir),luceneAnalyzer, true, IndexWriter.MaxFieldLength.LIMITED); indexWriter.setMaxMergeDocs(5); indexWriter.setMergeFactor(5); //不建立复合式索引文件,默认的情况下是复合式的索引文件 indexWriter.setUseCompoundFile(false); startTime = new Date().getTime(); // 增加document到索引去 for (int i = 0; i < subFiles.size(); i++) { if(subFiles.get(i).getName().indexOf(".")<=0){ continue; } System.out.println(new Date()+" File " + subFiles.get(i).getCanonicalPath()+ " 正在被索引...."); // 将txt 文件写到 Document中 Document document = new Document(); String fileName=subFiles.get(i).getName();//.substring(0,subFiles.get(i).getName().indexOf(".")); Field fieldName = new Field("fileName",fileName,Field.Store.NO,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS); document.add(fieldName); String filePath=subFiles.get(i).getPath(); Field FieldPath = new Field("filePath",filePath,Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS); document.add(FieldPath); String contents = FileUtils.fileReaderAll(subFiles.get(i).getCanonicalPath(),"GBK");// 转化成GBK Field FieldBody = new Field("contents", contents, Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS); document.add(FieldBody); indexWriter.addDocument(document); } } catch (CorruptIndexException e) { e.printStackTrace(); } catch (LockObtainFailedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { // optimize()方法是对索引进行优化 indexWriter.optimize(); indexWriter.close(); // 测试一下索引的时间 long endTime = new Date().getTime(); System.out.println("这花费了" + (endTime - startTime)+" 毫秒来把文档增加到索引里面去!\n"+indexDir.getPath()); File[] fils=indexDir.listFiles(); for(int i=0;i<fils.length;i++){ System.out.println(fils[i].getCanonicalPath()); } } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
相关推荐
ribavnu 2020-11-16
moyekongling 2020-11-13
坚持是一种品质 2020-11-16
chenjiazhu 2020-09-29
kikaylee 2020-10-31
Ida 2020-09-16
liuweiq 2020-09-09
silencehgt 2020-09-07
sunnyxuebuhui 2020-09-07
西瓜皮儿的皮儿 2020-09-07
LuckyLXG 2020-09-08
明瞳 2020-08-19
MissFuTT 2020-08-18
jzlixiao 2020-08-18
zhushenghan 2020-08-16
罗罗 2020-08-16
mrandy 2020-08-15
houdaxiami 2020-08-15