Browse Source

更新索引后延迟commit

sunyj 8 years ago
parent
commit
e1b265d44c

+ 4 - 8
search-console/src/main/java/com/uas/search/console/service/impl/IndexServiceImpl.java

@@ -168,7 +168,7 @@ public class IndexServiceImpl implements IndexService {
 					continue;
 				}
 				indexWriterManager.release(tableName);
-				indexSearcherManager.flushCache(tableName, null);
+				indexSearcherManager.flushCache(tableName, indexWriter, null);
 				Long end = new Date().getTime();
 				logger.info(String.format("创建%s索引: %s条,耗时%.2fs\n ", tableName, size, (end - start) / 1000.0));
 			}
@@ -196,7 +196,6 @@ public class IndexServiceImpl implements IndexService {
 		indexWriter = indexWriterManager.get(tableName);
 		logger.info("正在清理旧索引..." + tableName);
 		indexWriter.deleteAll();
-		indexWriter.commit();
 		logger.info("旧索引清理完毕..." + tableName);
 	}
 
@@ -451,8 +450,7 @@ public class IndexServiceImpl implements IndexService {
 				try {
 					indexWriter = indexWriterManager.get(tableName);
 					indexWriter.addDocument(document);
-					indexWriter.commit();
-					indexSearcherManager.flushCache(tableName, null);
+					indexSearcherManager.flushCache(tableName, indexWriter, null);
 					return obj;
 				} catch (IOException | InterruptedException e) {
 					logger.error("", e);
@@ -499,8 +497,7 @@ public class IndexServiceImpl implements IndexService {
 					} else {
 						throw new SearchException("Message parsing failed!");
 					}
-					indexWriter.commit();
-					indexSearcherManager.flushCache(tableName, null);
+					indexSearcherManager.flushCache(tableName, indexWriter, null);
 					return obj;
 				} catch (IOException | InterruptedException e) {
 					logger.error("", e);
@@ -544,8 +541,7 @@ public class IndexServiceImpl implements IndexService {
 				} else {
 					throw new SearchException("Message parsing failed!");
 				}
-				indexWriter.commit();
-				indexSearcherManager.flushCache(tableName, null);
+				indexSearcherManager.flushCache(tableName, indexWriter, null);
 				return obj;
 			} catch (IOException e) {
 				logger.error("", e);

+ 7 - 3
search-console/src/main/java/com/uas/search/console/support/IndexSearcherManager.java

@@ -9,6 +9,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.NIOFSDirectory;
@@ -206,10 +207,11 @@ public class IndexSearcherManager {
 	 * 
 	 * @param tableName
 	 *            表名
+	 * @param indexWriter
 	 * @param delay
 	 *            延迟一定时间刷新/ms,可为空,默认延迟3000ms
 	 */
-	public void flushCache(final String tableName, final Long delay) {
+	public void flushCache(final String tableName, final IndexWriter indexWriter, final Long delay) {
 		if (StringUtils.isEmpty(tableName)) {
 			return;
 		}
@@ -221,10 +223,12 @@ public class IndexSearcherManager {
 				@Override
 				public void run() {
 					try {
-						// 延迟一定时间再刷新缓存
+						// 延迟一定时间再提交更改(提高更新索引的速度)并刷新缓存(提高搜索速度)
 						Thread.sleep(delayCopy);
+						// 提交更改后再刷新
+						indexWriter.commit();
 						maybeReopen(tableName);
-					} catch (InterruptedException e) {
+					} catch (InterruptedException | IOException e) {
 						logger.error("", e);
 					} finally {
 						// 线程执行完毕,无论是否成功,均将状态改为false