comparison src/luan/modules/lucene/LuceneIndex.java @ 1764:527c53b91a50

lucene error handling
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 22 May 2023 20:43:52 -0600
parents 164c6ea53147
children c62324841dfb
comparison
equal deleted inserted replaced
1763:164c6ea53147 1764:527c53b91a50
1 package luan.modules.lucene; 1 package luan.modules.lucene;
2 2
3 import java.io.Closeable;
4 import java.io.File; 3 import java.io.File;
5 import java.io.FileOutputStream;
6 import java.io.FileInputStream;
7 import java.io.IOException; 4 import java.io.IOException;
8 import java.lang.ref.Reference; 5 import java.lang.ref.Reference;
9 import java.lang.ref.WeakReference; 6 import java.lang.ref.WeakReference;
10 import java.util.Arrays;
11 import java.util.Iterator;
12 import java.util.Map; 7 import java.util.Map;
13 import java.util.HashMap; 8 import java.util.HashMap;
14 import java.util.List;
15 import java.util.ArrayList; 9 import java.util.ArrayList;
16 import java.util.Set;
17 import java.util.HashSet;
18 import java.util.Collections;
19 import java.util.concurrent.atomic.AtomicInteger; 10 import java.util.concurrent.atomic.AtomicInteger;
20 import java.util.concurrent.locks.Lock;
21 import java.util.concurrent.locks.ReentrantLock; 11 import java.util.concurrent.locks.ReentrantLock;
22 import java.util.zip.ZipOutputStream;
23 import java.util.zip.ZipEntry;
24 import org.apache.lucene.analysis.Analyzer; 12 import org.apache.lucene.analysis.Analyzer;
25 import org.apache.lucene.analysis.TokenStream; 13 import org.apache.lucene.analysis.TokenStream;
26 import org.apache.lucene.analysis.core.KeywordAnalyzer; 14 import org.apache.lucene.analysis.core.KeywordAnalyzer;
27 import org.apache.lucene.analysis.core.SimpleAnalyzer; 15 import org.apache.lucene.analysis.core.SimpleAnalyzer;
28 import org.apache.lucene.analysis.en.EnglishAnalyzer; 16 import org.apache.lucene.analysis.en.EnglishAnalyzer;
29 import org.apache.lucene.document.Document; 17 import org.apache.lucene.document.Document;
30 import org.apache.lucene.document.Field;
31 import org.apache.lucene.document.StoredField;
32 import org.apache.lucene.document.StringField;
33 import org.apache.lucene.document.TextField;
34 import org.apache.lucene.document.IntField;
35 import org.apache.lucene.document.LongField;
36 import org.apache.lucene.document.DoubleField;
37 import org.apache.lucene.index.IndexableField;
38 import org.apache.lucene.index.IndexWriter;
39 import org.apache.lucene.index.IndexWriterConfig;
40 import org.apache.lucene.index.DirectoryReader; 18 import org.apache.lucene.index.DirectoryReader;
41 import org.apache.lucene.index.Term; 19 import org.apache.lucene.index.Term;
42 import org.apache.lucene.index.SnapshotDeletionPolicy; 20 import org.apache.lucene.index.SnapshotDeletionPolicy;
43 import org.apache.lucene.index.IndexCommit; 21 import org.apache.lucene.index.IndexCommit;
44 import org.apache.lucene.index.AtomicReaderContext; 22 import org.apache.lucene.index.AtomicReaderContext;
45 import org.apache.lucene.index.CheckIndex; 23 import org.apache.lucene.index.CheckIndex;
46 import org.apache.lucene.store.Directory;
47 import org.apache.lucene.store.FSDirectory; 24 import org.apache.lucene.store.FSDirectory;
48 import org.apache.lucene.util.Version; 25 import org.apache.lucene.util.Version;
49 import org.apache.lucene.util.BytesRef; 26 import org.apache.lucene.util.BytesRef;
50 import org.apache.lucene.util.NumericUtils; 27 import org.apache.lucene.util.NumericUtils;
51 import org.apache.lucene.search.Query; 28 import org.apache.lucene.search.Query;
52 import org.apache.lucene.search.PrefixQuery;
53 import org.apache.lucene.search.TermQuery;
54 import org.apache.lucene.search.MatchAllDocsQuery; 29 import org.apache.lucene.search.MatchAllDocsQuery;
55 import org.apache.lucene.search.TopDocs; 30 import org.apache.lucene.search.TopDocs;
56 import org.apache.lucene.search.Sort; 31 import org.apache.lucene.search.Sort;
57 import org.apache.lucene.search.SortField; 32 import org.apache.lucene.search.SortField;
58 import org.apache.lucene.search.IndexSearcher; 33 import org.apache.lucene.search.IndexSearcher;
62 import org.apache.lucene.search.Scorer; 37 import org.apache.lucene.search.Scorer;
63 import org.apache.lucene.search.Explanation; 38 import org.apache.lucene.search.Explanation;
64 import org.apache.lucene.search.highlight.Formatter; 39 import org.apache.lucene.search.highlight.Formatter;
65 import org.apache.lucene.search.highlight.Highlighter; 40 import org.apache.lucene.search.highlight.Highlighter;
66 import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; 41 import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
67 import org.apache.lucene.search.highlight.Fragmenter;
68 import org.apache.lucene.search.highlight.NullFragmenter; 42 import org.apache.lucene.search.highlight.NullFragmenter;
69 import org.apache.lucene.search.highlight.SimpleSpanFragmenter; 43 import org.apache.lucene.search.highlight.SimpleSpanFragmenter;
70 import org.apache.lucene.search.highlight.QueryScorer; 44 import org.apache.lucene.search.highlight.QueryScorer;
71 import org.apache.lucene.search.highlight.TokenGroup; 45 import org.apache.lucene.search.highlight.TokenGroup;
72 import goodjava.lucene.analysis.LowercaseAnalyzer; 46 import goodjava.lucene.analysis.LowercaseAnalyzer;
87 import luan.Luan; 61 import luan.Luan;
88 import luan.LuanTable; 62 import luan.LuanTable;
89 import luan.LuanFunction; 63 import luan.LuanFunction;
90 import luan.LuanException; 64 import luan.LuanException;
91 import luan.LuanRuntimeException; 65 import luan.LuanRuntimeException;
92 import luan.modules.parsers.LuanToString;
93 import goodjava.logging.Logger; 66 import goodjava.logging.Logger;
94 import goodjava.logging.LoggerFactory; 67 import goodjava.logging.LoggerFactory;
95 68
96 69
97 public final class LuceneIndex { 70 public final class LuceneIndex {
188 161
189 public boolean reopen() throws IOException { 162 public boolean reopen() throws IOException {
190 fsDir = FSDirectory.open(indexDir); 163 fsDir = FSDirectory.open(indexDir);
191 boolean wasCreated = !fsDir.getDirectory().exists(); 164 boolean wasCreated = !fsDir.getDirectory().exists();
192 writer = new LuceneIndexWriter(fsDir,config); 165 writer = new LuceneIndexWriter(fsDir,config);
193 if( logDir != null ) { 166 try {
194 if( BackupIndexWriter.backupDomains == null ) { 167 if( logDir != null ) {
195 writer = new LoggingIndexWriter((LuceneIndexWriter)writer,logDir,logTime); 168 if( BackupIndexWriter.backupDomains == null ) {
196 } else { 169 writer = new LoggingIndexWriter((LuceneIndexWriter)writer,logDir,logTime);
197 writer = BackupIndexWriter.newWithRestore((LuceneIndexWriter)writer,logDir,logTime,domain,name); 170 } else {
198 } 171 writer = BackupIndexWriter.newWithRestore((LuceneIndexWriter)writer,logDir,logTime,domain,name);
199 } 172 }
200 reader = DirectoryReader.open(fsDir); 173 }
201 searcher = new IndexSearcher(reader); 174 reader = DirectoryReader.open(fsDir);
202 initId(); 175 searcher = new IndexSearcher(reader);
203 return wasCreated; 176 initId();
177 return wasCreated;
178 } catch(IOException e) {
179 writer.close();
180 throw e;
181 }
204 } 182 }
205 183
206 private void wrote() { 184 private void wrote() {
207 writeCounter.incrementAndGet(); 185 writeCounter.incrementAndGet();
208 } 186 }
356 default: 334 default:
357 throw new RuntimeException(); 335 throw new RuntimeException();
358 } 336 }
359 } 337 }
360 338
361 /*
362 public void backup(String zipFile) throws LuanException, IOException {
363 if( !zipFile.endsWith(".zip") )
364 throw new LuanException("file "+zipFile+" doesn't end with '.zip'");
365 IndexCommit ic = snapshotDeletionPolicy.snapshot();
366 try {
367 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
368 for( String fileName : ic.getFileNames() ) {
369 out.putNextEntry(new ZipEntry(fileName));
370 FileInputStream in = new FileInputStream(new File(indexDir,fileName));
371 Utils.copyAll(in,out);
372 in.close();
373 out.closeEntry();
374 }
375 out.close();
376 } finally {
377 snapshotDeletionPolicy.release(ic);
378 }
379 }
380 */
381 public SnapshotDeletionPolicy snapshotDeletionPolicy() { 339 public SnapshotDeletionPolicy snapshotDeletionPolicy() {
382 return (SnapshotDeletionPolicy)writer.getLuceneIndexWriter().getConfig().getIndexDeletionPolicy(); 340 return (SnapshotDeletionPolicy)writer.getLuceneIndexWriter().getConfig().getIndexDeletionPolicy();
383 } 341 }
384 342
385 public Object snapshot(Luan luan,LuanFunction fn) throws LuanException, IOException { 343 public Object snapshot(Luan luan,LuanFunction fn) throws LuanException, IOException {