Lucene对index操作
1 package org.lucene.index; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 import org.apache.lucene.analysis.standard.StandardAnalyzer; 7 import org.apache.lucene.document.Document; 8 import org.apache.lucene.document.Field; 9 import org.apache.lucene.index.CorruptIndexException; 10 import org.apache.lucene.index.IndexReader; 11 import org.apache.lucene.index.IndexWriter; 12 import org.apache.lucene.index.IndexWriterConfig; 13 import org.apache.lucene.index.Term; 14 import org.apache.lucene.store.Directory; 15 import org.apache.lucene.store.FSDirectory; 16 import org.apache.lucene.store.LockObtainFailedException; 17 import org.apache.lucene.util.Version; 18 19 public class IndexUtil { 20 String[] ids = { "aa", "bb", "cc", "dd", "ee", "ff", "gg" }; 21 String[] emails = { "aaa@lucenes.com", "bbb@lucenes.com", 22 "ccc@lucenes.com", "ddd@lucenes.com", "eee@lucenes.com", 23 "fff@lucenes.com", "ggg@lucenes.com" }; 24 String[] contents = { "aaaaaaaaaaaaaa", "bbbbbbbbbbbbbb", 25 "ccccccccccccccc", "dddddddddddddd", "eeeeeeeeeeeeee", 26 "fffffffffffffff", "gggggggggggggg" }; 27 String[] names = { "zhangsan", "lisi", "wangwu", "zhaoliu", "tianqi", 28 "zhaoba", "chenjiu" }; 29 Integer[] attachs = { 1, 2, 5, 4, 6, 2, 3 }; 30 31 Directory directory = null; 32 33 public IndexUtil() { 34 try { 35 directory = FSDirectory.open(new File( 36 "E:/luceneworkspace/Lucene2/path")); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } 40 } 41 42 /** 43 * 创建索引 44 */ 45 public void index() { 46 IndexWriter indexWriter = null; 47 try { 48 indexWriter = new IndexWriter(directory, new IndexWriterConfig( 49 Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35))); 50 indexWriter.deleteAll(); 51 Document document = null; 52 for (int i = 0; i < ids.length; i++) { 53 document = new Document(); 54 document.add(new Field("id", ids[i], Field.Store.YES, 55 Field.Index.NOT_ANALYZED_NO_NORMS)); 56 document.add(new Field("email", emails[i], Field.Store.YES, 57 Field.Index.NOT_ANALYZED)); 58 document.add(new Field("content", contents[i], Field.Store.NO, 59 Field.Index.ANALYZED)); 60 document.add(new Field("name", names[i], Field.Store.YES, 61 Field.Index.NOT_ANALYZED)); 62 indexWriter.addDocument(document); 63 } 64 } catch (CorruptIndexException e) { 65 e.printStackTrace(); 66 } catch (LockObtainFailedException e) { 67 e.printStackTrace(); 68 } catch (IOException e) { 69 e.printStackTrace(); 70 } finally { 71 try { 72 if (indexWriter != null) 73 indexWriter.close(); 74 } catch (CorruptIndexException e) { 75 e.printStackTrace(); 76 } catch (IOException e) { 77 e.printStackTrace(); 78 } 79 } 80 } 81 82 /** 83 * 删除索引 84 */ 85 public void delete() { 86 IndexWriter indexWriter = null; 87 try { 88 indexWriter = new IndexWriter(directory, new IndexWriterConfig( 89 Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35))); 90 indexWriter.deleteDocuments(new Term("id", "aa")); 91 } catch (CorruptIndexException e) { 92 e.printStackTrace(); 93 } catch (LockObtainFailedException e) { 94 e.printStackTrace(); 95 } catch (IOException e) { 96 e.printStackTrace(); 97 } finally { 98 try { 99 if (indexWriter != null) 100 indexWriter.close(); 101 } catch (CorruptIndexException e) { 102 e.printStackTrace(); 103 } catch (IOException e) { 104 e.printStackTrace(); 105 } 106 } 107 } 108 109 /** 110 * 恢复索引 111 */ 112 public void undelete() { 113 IndexReader indexReader = null; 114 try { 115 indexReader = IndexReader.open(directory, false); 116 indexReader.undeleteAll(); 117 } catch (CorruptIndexException e) { 118 e.printStackTrace(); 119 } catch (LockObtainFailedException e) { 120 e.printStackTrace(); 121 } catch (IOException e) { 122 e.printStackTrace(); 123 } finally { 124 try { 125 if (indexReader != null) 126 indexReader.close(); 127 } catch (IOException e) { 128 e.printStackTrace(); 129 } 130 } 131 } 132 133 /** 134 * 清空回收站索引 135 */ 136 public void clear(){ 137 IndexWriter indexWriter = null; 138 try { 139 indexWriter = new IndexWriter(directory, new IndexWriterConfig( 140 Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35))); 141 indexWriter.forceMergeDeletes(); 142 } catch (CorruptIndexException e) { 143 e.printStackTrace(); 144 } catch (LockObtainFailedException e) { 145 e.printStackTrace(); 146 } catch (IOException e) { 147 e.printStackTrace(); 148 } finally { 149 try { 150 if (indexWriter != null) 151 indexWriter.close(); 152 } catch (CorruptIndexException e) { 153 e.printStackTrace(); 154 } catch (IOException e) { 155 e.printStackTrace(); 156 } 157 } 158 } 159 160 /** 161 * 更新索引 162 */ 163 public void update(){ 164 IndexWriter indexWriter = null; 165 try { 166 indexWriter = new IndexWriter(directory, new IndexWriterConfig( 167 Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35))); 168 Document doc=new Document(); 169 doc.add(new Field("id", "hh", Field.Store.YES, 170 Field.Index.NOT_ANALYZED_NO_NORMS)); 171 doc.add(new Field("email", emails[2], Field.Store.YES, 172 Field.Index.NOT_ANALYZED)); 173 doc.add(new Field("content", contents[3], Field.Store.NO, 174 Field.Index.ANALYZED)); 175 doc.add(new Field("name", names[4], Field.Store.YES, 176 Field.Index.NOT_ANALYZED)); 177 indexWriter.updateDocument(new Term("id","aa"), doc); 178 } catch (CorruptIndexException e) { 179 e.printStackTrace(); 180 } catch (LockObtainFailedException e) { 181 e.printStackTrace(); 182 } catch (IOException e) { 183 e.printStackTrace(); 184 } finally { 185 try { 186 if (indexWriter != null) 187 indexWriter.close(); 188 } catch (CorruptIndexException e) { 189 e.printStackTrace(); 190 } catch (IOException e) { 191 e.printStackTrace(); 192 } 193 } 194 } 195 196 public void query() { 197 try { 198 IndexReader indexReader = IndexReader.open(directory); 199 System.out.println("maxDoc:" + indexReader.maxDoc()); 200 System.out.println("numDocs:" + indexReader.numDocs()); 201 System.out.println("numDeleteDocs:"+indexReader.numDeletedDocs()); 202 } catch (CorruptIndexException e) { 203 e.printStackTrace(); 204 } catch (IOException e) { 205 e.printStackTrace(); 206 } 207 208 } 209 }