Browse Source

延迟一段时间commit索引的更改

sunyj 8 years ago
parent
commit
04626cb2cf

+ 1 - 1
search-console-b2b/src/main/java/com/uas/search/console/b2b/jms/AQListener.java

@@ -117,7 +117,7 @@ public class AQListener implements InitializingBean {
 			logger.info(message);
 			logger.info(message);
 		} catch (Throwable e) {
 		} catch (Throwable e) {
 			message = "索引实时更新服务开启失败:" + dataSourceQualifier.getQualifier();
 			message = "索引实时更新服务开启失败:" + dataSourceQualifier.getQualifier();
-			logger.error(message);
+			logger.error(message, e);
 			try {
 			try {
 				closeConsumer(dataSourceQualifier);
 				closeConsumer(dataSourceQualifier);
 			} catch (JMSException e1) {
 			} catch (JMSException e1) {

+ 1 - 1
search-console-b2b/src/main/java/com/uas/search/console/b2b/model/ParsedQueueMessage.java

@@ -31,7 +31,7 @@ public class ParsedQueueMessage {
 	private int methodType;
 	private int methodType;
 
 
 	/**
 	/**
-	 * 存放解析出来的对象:kind、brand或component、order、purchase等对象
+	 * 存放解析出来的对象
 	 */
 	 */
 	private Object[] objects;
 	private Object[] objects;
 
 

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

@@ -112,7 +112,7 @@ public class IndexServiceImpl implements IndexService {
 				} else {
 				} else {
 					createIndexesFromFiles(ClassAndTableNameUtils.toClass(tableName));
 					createIndexesFromFiles(ClassAndTableNameUtils.toClass(tableName));
 				}
 				}
-				indexSearcherManager.flushCache(tableName, null);
+				indexSearcherManager.flushCache(tableName, indexWriter, null);
 			}
 			}
 		} catch (Throwable e) {
 		} catch (Throwable e) {
 			// 防止SQLRecoverableException导致应用终止
 			// 防止SQLRecoverableException导致应用终止
@@ -261,7 +261,6 @@ public class IndexServiceImpl implements IndexService {
 		indexWriter = indexWriterManager.get(tableName);
 		indexWriter = indexWriterManager.get(tableName);
 		logger.info("正在清理旧索引..." + tableName.value());
 		logger.info("正在清理旧索引..." + tableName.value());
 		indexWriter.deleteAll();
 		indexWriter.deleteAll();
-		indexWriter.commit();
 		logger.info("旧索引清理完毕..." + tableName.value());
 		logger.info("旧索引清理完毕..." + tableName.value());
 	}
 	}
 
 
@@ -379,8 +378,7 @@ public class IndexServiceImpl implements IndexService {
 					Table_name tableName = ClassAndTableNameUtils.toTableName(obj.getClass());
 					Table_name tableName = ClassAndTableNameUtils.toTableName(obj.getClass());
 					indexWriter = indexWriterManager.get(tableName);
 					indexWriter = indexWriterManager.get(tableName);
 					indexWriter.addDocument(document);
 					indexWriter.addDocument(document);
-					indexWriter.commit();
-					indexSearcherManager.flushCache(tableName, null);
+					indexSearcherManager.flushCache(tableName, indexWriter, null);
 					return obj;
 					return obj;
 				} catch (IOException | InterruptedException e) {
 				} catch (IOException | InterruptedException e) {
 					logger.error("", e);
 					logger.error("", e);
@@ -404,8 +402,7 @@ public class IndexServiceImpl implements IndexService {
 					indexWriter = indexWriterManager.get(tableName);
 					indexWriter = indexWriterManager.get(tableName);
 					indexWriter.updateDocument(new Term(ClassAndTableNameUtils.getIdField(obj.getClass()),
 					indexWriter.updateDocument(new Term(ClassAndTableNameUtils.getIdField(obj.getClass()),
 							String.valueOf(ClassAndTableNameUtils.getId(obj))), document);
 							String.valueOf(ClassAndTableNameUtils.getId(obj))), document);
-					indexWriter.commit();
-					indexSearcherManager.flushCache(tableName, null);
+					indexSearcherManager.flushCache(tableName, indexWriter, null);
 					return obj;
 					return obj;
 				} catch (IOException | InterruptedException e) {
 				} catch (IOException | InterruptedException e) {
 					logger.error("", e);
 					logger.error("", e);
@@ -427,8 +424,7 @@ public class IndexServiceImpl implements IndexService {
 				indexWriter = indexWriterManager.get(tableName);
 				indexWriter = indexWriterManager.get(tableName);
 				indexWriter.deleteDocuments(new Term(ClassAndTableNameUtils.getIdField(obj.getClass()),
 				indexWriter.deleteDocuments(new Term(ClassAndTableNameUtils.getIdField(obj.getClass()),
 						String.valueOf(ClassAndTableNameUtils.getId(obj))));
 						String.valueOf(ClassAndTableNameUtils.getId(obj))));
-				indexWriter.commit();
-				indexSearcherManager.flushCache(tableName, null);
+				indexSearcherManager.flushCache(tableName, indexWriter, null);
 				return obj;
 				return obj;
 			} catch (IOException e) {
 			} catch (IOException e) {
 				logger.error("", e);
 				logger.error("", e);

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

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

+ 0 - 1
search-console-b2b/src/main/webapp/WEB-INF/views/console.html

@@ -41,7 +41,6 @@
 				<li><a target="_blank">index/listen/isRunning?dataSourceQualifier=platformmanager</a></li>
 				<li><a target="_blank">index/listen/isRunning?dataSourceQualifier=platformmanager</a></li>
 				<li><a target="_blank">index/listen/restart?dataSourceQualifiers=platformmanager</a></li>
 				<li><a target="_blank">index/listen/restart?dataSourceQualifiers=platformmanager</a></li>
 				<li><a target="_blank">index/listen/details?dataSourceQualifier=platformmanager&page=1&size=10</a></li>
 				<li><a target="_blank">index/listen/details?dataSourceQualifier=platformmanager&page=1&size=10</a></li>
-				<li><a target="_blank">index/listen/details?page=1&size=10</a></li>
 				<li><a target="_blank">listenDetails?dataSourceQualifier=platformmanager</a></li>
 				<li><a target="_blank">listenDetails?dataSourceQualifier=platformmanager</a></li>
 				<li>index/downloadData</li>
 				<li>index/downloadData</li>
 				<li><a target="_blank">index/downloadData?tableNames=PURC$ORDERS&startFileIndex=2</a></li>
 				<li><a target="_blank">index/downloadData?tableNames=PURC$ORDERS&startFileIndex=2</a></li>