Mercurial Hosting > luan
comparison src/goodjava/lucene/api/LuceneIndexWriter.java @ 1528:3bd4d7963456
use goodjava/lucene/api
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Sun, 26 Jul 2020 23:11:53 -0600 |
| parents | f848d40b3b07 |
| children | c27dc6af87ca |
comparison
equal
deleted
inserted
replaced
| 1527:fa1e3adbebfb | 1528:3bd4d7963456 |
|---|---|
| 14 import org.apache.lucene.document.LongField; | 14 import org.apache.lucene.document.LongField; |
| 15 import org.apache.lucene.document.DoubleField; | 15 import org.apache.lucene.document.DoubleField; |
| 16 import org.apache.lucene.document.FloatField; | 16 import org.apache.lucene.document.FloatField; |
| 17 import org.apache.lucene.index.IndexWriter; | 17 import org.apache.lucene.index.IndexWriter; |
| 18 import org.apache.lucene.index.IndexWriterConfig; | 18 import org.apache.lucene.index.IndexWriterConfig; |
| 19 import org.apache.lucene.index.LiveIndexWriterConfig; | |
| 19 import org.apache.lucene.index.Term; | 20 import org.apache.lucene.index.Term; |
| 20 import org.apache.lucene.index.DirectoryReader; | 21 import org.apache.lucene.index.DirectoryReader; |
| 21 import org.apache.lucene.index.IndexReader; | 22 import org.apache.lucene.index.IndexReader; |
| 22 import org.apache.lucene.index.CheckIndex; | 23 import org.apache.lucene.index.CheckIndex; |
| 23 import org.apache.lucene.search.Query; | 24 import org.apache.lucene.search.Query; |
| 24 import org.apache.lucene.search.IndexSearcher; | 25 import org.apache.lucene.search.IndexSearcher; |
| 25 import org.apache.lucene.store.Directory; | 26 import org.apache.lucene.store.Directory; |
| 26 import org.apache.lucene.util.Version; | |
| 27 import goodjava.logging.Logger; | 27 import goodjava.logging.Logger; |
| 28 import goodjava.logging.LoggerFactory; | 28 import goodjava.logging.LoggerFactory; |
| 29 | 29 |
| 30 | 30 |
| 31 public final class LuceneIndexWriter implements GoodIndexWriter { | 31 public final class LuceneIndexWriter implements GoodIndexWriter { |
| 32 private static final Logger logger = LoggerFactory.getLogger(LuceneIndexWriter.class); | 32 private static final Logger logger = LoggerFactory.getLogger(LuceneIndexWriter.class); |
| 33 private final FieldAnalyzer fieldAnalyzer = new FieldAnalyzer(); | 33 private final FieldAnalyzer fieldAnalyzer; |
| 34 public final Version luceneVersion; | |
| 35 public final IndexWriterConfig luceneConfig; | |
| 36 public final IndexWriter luceneWriter; | 34 public final IndexWriter luceneWriter; |
| 37 public final GoodIndexWriterConfig goodConfig; | 35 public final GoodIndexWriterConfig goodConfig; |
| 38 private final Map<String,Boolean> indexedMap = new HashMap<String,Boolean>(); | 36 private final Map<String,Boolean> indexedMap = new HashMap<String,Boolean>(); |
| 39 | 37 |
| 40 public LuceneIndexWriter(Version luceneVersion,Directory dir,GoodIndexWriterConfig goodConfig) throws IOException { | 38 public LuceneIndexWriter(Directory dir,GoodIndexWriterConfig goodConfig) throws IOException { |
| 41 this.luceneVersion = luceneVersion; | 39 IndexWriterConfig luceneConfig = goodConfig.newLuceneConfig(); |
| 42 this.luceneConfig = new IndexWriterConfig(luceneVersion,fieldAnalyzer); | 40 Analyzer analyzer = luceneConfig.getAnalyzer(); |
| 41 if( !(analyzer instanceof FieldAnalyzer) ) | |
| 42 throw new RuntimeException("analyzer must be FieldAnalyzer"); | |
| 43 this.fieldAnalyzer = (FieldAnalyzer)analyzer; | |
| 43 this.luceneWriter = new IndexWriter(dir,luceneConfig); | 44 this.luceneWriter = new IndexWriter(dir,luceneConfig); |
| 44 this.goodConfig = goodConfig; | 45 this.goodConfig = goodConfig; |
| 45 luceneWriter.commit(); // commit index creation | 46 luceneWriter.commit(); // commit index creation |
| 47 } | |
| 48 | |
| 49 public Directory getDirectory() { | |
| 50 return luceneWriter.getDirectory(); | |
| 51 } | |
| 52 | |
| 53 public LiveIndexWriterConfig getLuceneConfig() { | |
| 54 return luceneWriter.getConfig(); | |
| 46 } | 55 } |
| 47 | 56 |
| 48 public void close() throws IOException { | 57 public void close() throws IOException { |
| 49 luceneWriter.close(); | 58 luceneWriter.close(); |
| 50 } | 59 } |
| 72 | 81 |
| 73 public void updateDocument(String keyFieldName,Map<String,Object> storedFields) throws IOException { | 82 public void updateDocument(String keyFieldName,Map<String,Object> storedFields) throws IOException { |
| 74 if( !isIndexed(keyFieldName) ) | 83 if( !isIndexed(keyFieldName) ) |
| 75 throw new RuntimeException("can't update using unindexed field "+keyFieldName); | 84 throw new RuntimeException("can't update using unindexed field "+keyFieldName); |
| 76 if( fieldAnalyzer.isAdded(keyFieldName) ) | 85 if( fieldAnalyzer.isAdded(keyFieldName) ) |
| 77 throw new RuntimeException("can't update using analyzeed field "+keyFieldName); | 86 throw new RuntimeException("can't update using analyzed field "+keyFieldName); |
| 78 Document doc = newDocument(storedFields); | 87 Document doc = newDocument(storedFields); |
| 79 Object keyValue = storedFields.get(keyFieldName); | 88 Object keyValue = storedFields.get(keyFieldName); |
| 80 if( keyValue==null ) | 89 if( keyValue==null ) |
| 81 throw new RuntimeException("no value for field "+keyFieldName); | 90 throw new RuntimeException("no value for field "+keyFieldName); |
| 82 Term term = LuceneUtils.term(keyFieldName,keyValue); | 91 Term term = LuceneUtils.term(keyFieldName,keyValue); |
