Mercurial Hosting > luan
comparison src/goodjava/lucene/api/LuceneIndexWriter.java @ 1687:f48db13ae2d9
unlogged lucene support
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Thu, 09 Jun 2022 19:44:41 -0600 |
| parents | 35601f15ecc3 |
| children |
comparison
equal
deleted
inserted
replaced
| 1686:e34b73678a4f | 1687:f48db13ae2d9 |
|---|---|
| 44 this.luceneWriter = new IndexWriter(dir,luceneConfig); | 44 this.luceneWriter = new IndexWriter(dir,luceneConfig); |
| 45 this.goodConfig = goodConfig; | 45 this.goodConfig = goodConfig; |
| 46 luceneWriter.commit(); // commit index creation | 46 luceneWriter.commit(); // commit index creation |
| 47 } | 47 } |
| 48 | 48 |
| 49 public IndexWriter getLuceneIndexWriter() { | 49 @Override public IndexWriter getLuceneIndexWriter() { |
| 50 return luceneWriter; | 50 return luceneWriter; |
| 51 } | 51 } |
| 52 | 52 |
| 53 public void close() throws IOException { | 53 @Override public void close() throws IOException { |
| 54 luceneWriter.close(); | 54 luceneWriter.close(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 public void commit() throws IOException { | 57 @Override public void commit() throws IOException { |
| 58 luceneWriter.commit(); | 58 luceneWriter.commit(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 public void rollback() throws IOException { | 61 @Override public void rollback() throws IOException { |
| 62 luceneWriter.rollback(); | 62 luceneWriter.rollback(); |
| 63 } | 63 } |
| 64 | 64 |
| 65 public void deleteAll() throws IOException { | 65 @Override public void deleteAll() throws IOException { |
| 66 luceneWriter.deleteAll(); | 66 luceneWriter.deleteAll(); |
| 67 } | 67 } |
| 68 | 68 |
| 69 public void deleteDocuments(Query query) throws IOException { | 69 @Override public void deleteDocuments(Query query) throws IOException { |
| 70 luceneWriter.deleteDocuments(query); | 70 luceneWriter.deleteDocuments(query); |
| 71 } | 71 } |
| 72 | 72 |
| 73 public void addDocument(Map<String,Object> storedFields) throws IOException { | 73 @Override public void addDocument(Map<String,Object> storedFields) throws IOException { |
| 74 Document doc = newDocument(storedFields); | 74 Document doc = newDocument(storedFields); |
| 75 luceneWriter.addDocument(doc); | 75 luceneWriter.addDocument(doc); |
| 76 } | 76 } |
| 77 | 77 |
| 78 public void updateDocument(String keyFieldName,Map<String,Object> storedFields) throws IOException { | 78 @Override public void updateDocument(String keyFieldName,Map<String,Object> storedFields) throws IOException { |
| 79 if( !isIndexed(keyFieldName) ) | 79 if( !isIndexed(keyFieldName) ) |
| 80 throw new RuntimeException("can't update using unindexed field "+keyFieldName); | 80 throw new RuntimeException("can't update using unindexed field "+keyFieldName); |
| 81 if( fieldAnalyzer.isAdded(keyFieldName) ) | 81 if( fieldAnalyzer.isAdded(keyFieldName) ) |
| 82 throw new RuntimeException("can't update using analyzed field "+keyFieldName); | 82 throw new RuntimeException("can't update using analyzed field "+keyFieldName); |
| 83 Document doc = newDocument(storedFields); | 83 Document doc = newDocument(storedFields); |
| 89 } | 89 } |
| 90 | 90 |
| 91 private Document newDocument(Map<String,Object> storedFields) { | 91 private Document newDocument(Map<String,Object> storedFields) { |
| 92 Document doc = new Document(); | 92 Document doc = new Document(); |
| 93 MoreFieldInfo more = goodConfig.getMoreFieldInfo(storedFields); | 93 MoreFieldInfo more = goodConfig.getMoreFieldInfo(storedFields); |
| 94 addFields(doc,storedFields,Field.Store.YES,more.boosts); | 94 addFields( doc, storedFields, Field.Store.YES, more.boosts ); |
| 95 addFields(doc,more.unstoredFields,Field.Store.NO,more.boosts); | 95 addFields( doc, more.unstoredFields, Field.Store.NO, more.boosts ); |
| 96 return doc; | 96 return doc; |
| 97 } | |
| 98 | |
| 99 public void addDocument( Map<String,Object> storedFields, Map<String,Object> unstoredFields, Map<String,Float> boosts ) | |
| 100 throws IOException | |
| 101 { | |
| 102 Document doc = new Document(); | |
| 103 addFields( doc, storedFields, Field.Store.YES, boosts ); | |
| 104 addFields( doc, unstoredFields, Field.Store.NO, boosts ); | |
| 105 luceneWriter.addDocument(doc); | |
| 97 } | 106 } |
| 98 | 107 |
| 99 private void addFields( Document doc, Map<String,Object> fields, Field.Store store, Map<String,Float> boosts ) { | 108 private void addFields( Document doc, Map<String,Object> fields, Field.Store store, Map<String,Float> boosts ) { |
| 100 for( Map.Entry<String,Object> entry : fields.entrySet() ) { | 109 for( Map.Entry<String,Object> entry : fields.entrySet() ) { |
| 101 String name = entry.getKey(); | 110 String name = entry.getKey(); |
| 110 } | 119 } |
| 111 } | 120 } |
| 112 } | 121 } |
| 113 | 122 |
| 114 private Field newField( String name, Object value, Field.Store store, Float boost ) { | 123 private Field newField( String name, Object value, Field.Store store, Float boost ) { |
| 115 Field field = newField(name,value,store); | 124 Field field = newField2(name,value,store,boost); |
| 116 if( boost != null ) | 125 if( boost != null ) |
| 117 field.setBoost(boost); | 126 field.setBoost(boost); |
| 118 return field; | 127 return field; |
| 119 } | 128 } |
| 120 | 129 |
| 121 private Field newField( String name, Object value, Field.Store store ) { | 130 private Field newField2( String name, Object value, Field.Store store, Float boost ) { |
| 122 boolean isIndexed = isIndexed(name); | 131 boolean isIndexed = isIndexed(name); |
| 123 if( store==Field.Store.NO && !isIndexed ) | 132 if( store==Field.Store.NO && !isIndexed ) |
| 124 throw new RuntimeException("field '"+name+"' is unstored and unindexed"); | 133 throw new RuntimeException("field '"+name+"' is unstored and unindexed"); |
| 125 if( value instanceof String ) { | 134 if( value instanceof String ) { |
| 126 String s = (String)value; | 135 String s = (String)value; |
| 127 if( !isIndexed ) { | 136 if( !isIndexed ) { |
| 128 return new StoredField(name,s); | 137 return new StoredField(name,s); |
| 129 } else if( !fieldAnalyzer.isAdded(name) ) { | 138 } else if( !fieldAnalyzer.isAdded(name) ) { |
| 130 return new StringField(name,s,store); | 139 if( boost == null ) { |
| 140 return new StringField(name,s,store); | |
| 141 } else { | |
| 142 return new Field( name, s, Field.Store.NO, Field.Index.NOT_ANALYZED); | |
| 143 } | |
| 131 } else { | 144 } else { |
| 132 return new TextField(name,s,store); | 145 return new TextField(name,s,store); |
| 133 } | 146 } |
| 134 } else if( value instanceof Integer ) { | 147 } else if( value instanceof Integer ) { |
| 135 int i = (Integer)value; | 148 int i = (Integer)value; |
| 179 } | 192 } |
| 180 return b; | 193 return b; |
| 181 } | 194 } |
| 182 | 195 |
| 183 | 196 |
| 184 public void reindexDocuments(final String keyFieldName,Query query) throws IOException { | 197 @Override public void reindexDocuments(final String keyFieldName,Query query) throws IOException { |
| 185 IndexReader reader = openReader(); | 198 IndexReader reader = openReader(); |
| 186 final IndexSearcher searcher = new IndexSearcher(reader); | 199 final IndexSearcher searcher = new IndexSearcher(reader); |
| 187 searcher.search( query, new GoodCollector(){ | 200 searcher.search( query, new GoodCollector(){ |
| 188 public void collectDoc(int iDoc) throws IOException { | 201 @Override public void collectDoc(int iDoc) throws IOException { |
| 189 Document doc = searcher.doc(iDoc); | 202 Document doc = searcher.doc(iDoc); |
| 190 Map<String,Object> storedFields = LuceneUtils.toMap(doc); | 203 Map<String,Object> storedFields = LuceneUtils.toMap(doc); |
| 191 updateDocument(keyFieldName,storedFields); | 204 updateDocument(keyFieldName,storedFields); |
| 192 } | 205 } |
| 193 }); | 206 }); |
| 194 reader.close(); | 207 reader.close(); |
| 195 } | 208 } |
| 196 | 209 |
| 197 public IndexReader openReader() throws IOException { | 210 @Override public IndexReader openReader() throws IOException { |
| 198 return DirectoryReader.open(luceneWriter.getDirectory()); | 211 return DirectoryReader.open(luceneWriter.getDirectory()); |
| 199 } | 212 } |
| 200 | 213 |
| 201 public void check() throws IOException { | 214 public void check() throws IOException { |
| 202 CheckIndex.Status status = new CheckIndex(luceneWriter.getDirectory()).checkIndex(); | 215 CheckIndex.Status status = new CheckIndex(luceneWriter.getDirectory()).checkIndex(); |
| 203 if( !status.clean ) | 216 if( !status.clean ) |
| 204 logger.error("index not clean"); | 217 logger.error("index not clean"); |
| 205 } | 218 } |
| 206 | 219 |
| 207 public void tag(String tag) throws IOException {} | 220 @Override public void tag(String tag) throws IOException {} |
| 208 | 221 |
| 209 } | 222 } |
