@@ -73,6 +73,7 @@ public int UncommittedFiles
73
73
public bool Autocommit { get ; set ; }
74
74
75
75
76
+ private object reopen = "" ;
76
77
77
78
public bool IsDirty
78
79
{
@@ -98,11 +99,14 @@ public LuceneIndexManager(string name, string path, LuceneConfigurationSettings
98
99
99
100
private void Init ( )
100
101
{
101
- //TODO: [LOW] use factory or DI to setup analyzer, query parse, and other tuning attribute.
102
- logger . Debug ( "[IndexManager] init" ) ;
103
- analyzer = new StandardAnalyzer ( global ::Lucene . Net . Util . Version . LUCENE_30 ) ;
104
- InitIndex ( ) ;
105
- parser = new QueryParser ( global ::Lucene . Net . Util . Version . LUCENE_30 , "" , analyzer ) ;
102
+ lock ( reopen )
103
+ {
104
+ //TODO: [LOW] use factory or DI to setup analyzer, query parse, and other tuning attribute.
105
+ logger . Debug ( "[IndexManager] init" ) ;
106
+ analyzer = new StandardAnalyzer ( global ::Lucene . Net . Util . Version . LUCENE_30 ) ;
107
+ InitIndex ( ) ;
108
+ parser = new QueryParser ( global ::Lucene . Net . Util . Version . LUCENE_30 , "" , analyzer ) ;
109
+ }
106
110
}
107
111
108
112
private void InitIndex ( )
@@ -113,9 +117,22 @@ private void InitIndex()
113
117
logger . Debug ( "[IndexManager] Opening {0}" , Path ) ;
114
118
luceneIndexDirectory = settings . GetLuceneIndexDirectory ( Path ) ;
115
119
logger . Debug ( "[IndexManager] Creating IndexWriter" ) ;
116
- writer = new IndexWriter ( luceneIndexDirectory , analyzer , IndexWriter . MaxFieldLength . UNLIMITED ) ;
120
+ if ( writer == null )
121
+ {
122
+ writer = new IndexWriter ( luceneIndexDirectory , analyzer , IndexWriter . MaxFieldLength . UNLIMITED ) ;
123
+ }
124
+ else
125
+ {
126
+ writer . Commit ( ) ;
127
+ }
117
128
logger . Debug ( "[IndexManager] Creating IndexReader" ) ;
118
- reader = IndexReader . Open ( luceneIndexDirectory , true ) ;
129
+ if ( reader != null )
130
+ {
131
+ reader . Close ( ) ;
132
+ }
133
+
134
+ reader = IndexReader . Open ( luceneIndexDirectory , true ) ;
135
+
119
136
logger . Debug ( "[IndexManager] Creating IndexSearcher" ) ;
120
137
searcher = new IndexSearcher ( reader ) ;
121
138
}
@@ -278,11 +295,15 @@ public IPagedList<Document> Query(Query query, Sort field, int start, int size)
278
295
279
296
private void ReopenIndex ( )
280
297
{
298
+ lock ( reopen )
299
+ {
281
300
282
- logger . Debug ( "[IndexManager] Reopen index" ) ;
301
+ logger . Debug ( "[IndexManager] Reopen index" ) ;
283
302
284
- DisposeIndex ( ) ;
285
- InitIndex ( ) ;
303
+ // DisposeIndex();
304
+
305
+ InitIndex ( ) ;
306
+ }
286
307
}
287
308
288
309
public void Dispose ( )
@@ -306,6 +327,7 @@ public void DisposeIndex()
306
327
{
307
328
writer . Commit ( ) ;
308
329
writer . Dispose ( ) ;
330
+
309
331
}
310
332
catch ( Exception err )
311
333
{
0 commit comments