Просмотр исходного кода

索引搜索提取验证IndexSearcher的代码

sunyj 9 лет назад
Родитель
Сommit
d8a8d21659

+ 41 - 134
search-console/src/main/java/com/uas/search/console/service/impl/SearchServiceImpl.java

@@ -70,13 +70,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Long> ids = new ArrayList<Long>();
 		try {
@@ -106,13 +100,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Map<String, Object>> kinds = new ArrayList<Map<String, Object>>();
 		try {
@@ -143,13 +131,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Long> ids = new ArrayList<Long>();
 		try {
@@ -183,13 +165,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Map<String, Object>> brands = new ArrayList<Map<String, Object>>();
 		try {
@@ -219,14 +195,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 
 	@Override
 	public Map<String, Object> getComponentIds(String keyword, PageParams page) {
-		String message = "";
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		if (page == null) {
 			page = new PageParams();
@@ -316,13 +285,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		Set<Long> kindIds = new HashSet<Long>();
 		try {
@@ -368,15 +331,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			return kinds;
 		}
 
-		String message = "";
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
-
+		IndexSearcher searcher = getIndexSearcher();
 		BooleanQuery booleanQuery = new BooleanQuery();
 		for (Long kindId : kindIds) {
 			booleanQuery.add(new TermQuery(new Term(SearchConstants.KIND_ID_FIELD, String.valueOf(kindId))),
@@ -409,13 +364,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		Set<Long> brandIds = new HashSet<Long>();
 		try {
@@ -461,15 +410,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			return brands;
 		}
 
-		String message = "";
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
-
+		IndexSearcher searcher = getIndexSearcher();
 		BooleanQuery booleanQuery = new BooleanQuery();
 		for (Long brandId : brandIds) {
 			booleanQuery.add(new TermQuery(new Term(SearchConstants.BRAND_ID_FIELD, String.valueOf(brandId))),
@@ -540,13 +481,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Map<String, Object>> components = new ArrayList<>();
 		try {
@@ -583,13 +518,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Map<String, Object>> brands = new ArrayList<Map<String, Object>>();
 		// 品牌名称带有空格,并且中英文名并无一定顺序,因此对nameCn、nameEn均要搜索
@@ -659,13 +588,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<Map<String, Object>> kinds = new ArrayList<>();
 		try {
@@ -710,13 +633,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		String propertyIdString = String.valueOf(propertyId);
 		if (!propertyIdString.startsWith(SearchConstants.COMPONENT_PROPERTY_PREFIX)) {
@@ -836,13 +753,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher searcher = searcherManager.get();
-		if (searcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		List<String> result = new ArrayList<>();
 		try {
@@ -896,7 +807,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 	 * 判断搜索词是否为无效的(比如只包含特殊字符,不含有任何字母、数字、汉字等有意义的字符)
 	 * 
 	 * @param keyword
-	 * @return
+	 * @return 搜索词是否无效
 	 */
 	private static boolean isKeywordInvalid(String keyword) {
 		if (!StringUtils.isEmpty(keyword)) {
@@ -907,6 +818,20 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 		return true;
 	}
 
+	/**
+	 * 获取IndexSearcher对象,若为空,抛出异常
+	 * 
+	 * @return IndexSearcher对象
+	 */
+	private IndexSearcher getIndexSearcher() {
+		searcherManager.maybeReopen();
+		IndexSearcher searcher = searcherManager.get();
+		if (searcher == null) {
+			throw new SystemError("获取索引文件失败");
+		}
+		return searcher;
+	}
+
 	/**
 	 * 删除lists内startIndex(含)后的元素
 	 * 
@@ -931,25 +856,19 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher indexSearcher = searcherManager.get();
-		if (indexSearcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		KindSimpleInfo kind = null;
 		try {
 			TermQuery query = new TermQuery(new Term(SearchConstants.KIND_ID_FIELD, String.valueOf(kindId)));
-			TopDocs topDocs = indexSearcher.search(query, 1);
+			TopDocs topDocs = searcher.search(query, 1);
 			int totalHits = topDocs.totalHits;
 			if (totalHits > 1) {
 				message = "索引中存在不止一个类目:kindId=" + kindId;
 				logger.error(message);
 				throw new SystemError(message);
 			} else if (totalHits == 1) {
-				Document document = indexSearcher.doc(topDocs.scoreDocs[0].doc);
+				Document document = searcher.doc(topDocs.scoreDocs[0].doc);
 				kind = new KindSimpleInfo();
 				kind.setId(kindId);
 				kind.setNameCn(document.get(SearchConstants.KIND_NAMECN_FIELD));
@@ -960,7 +879,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 		} catch (IOException e) {
 			e.printStackTrace();
 		} finally {
-			searcherManager.release(indexSearcher);
+			searcherManager.release(searcher);
 		}
 		return kind;
 	}
@@ -973,25 +892,19 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher indexSearcher = searcherManager.get();
-		if (indexSearcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		BrandSimpleInfo brand = null;
 		try {
 			TermQuery query = new TermQuery(new Term(SearchConstants.BRAND_ID_FIELD, String.valueOf(brandId)));
-			TopDocs topDocs = indexSearcher.search(query, 1);
+			TopDocs topDocs = searcher.search(query, 1);
 			int totalHits = topDocs.totalHits;
 			if (totalHits > 1) {
 				message = "索引中存在不止一个品牌:brandId=" + brandId;
 				logger.error(message);
 				throw new SystemError(message);
 			} else if (totalHits == 1) {
-				Document document = indexSearcher.doc(topDocs.scoreDocs[0].doc);
+				Document document = searcher.doc(topDocs.scoreDocs[0].doc);
 				brand = new BrandSimpleInfo();
 				brand.setId(brandId);
 				brand.setNameCn(document.get(SearchConstants.BRAND_NAMECN_FIELD));
@@ -1002,7 +915,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 		} catch (IOException e) {
 			e.printStackTrace();
 		} finally {
-			searcherManager.release(indexSearcher);
+			searcherManager.release(searcher);
 		}
 		return brand;
 	}
@@ -1015,25 +928,19 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			logger.error(message);
 			throw new SystemError(message);
 		}
-		searcherManager.maybeReopen();
-		IndexSearcher indexSearcher = searcherManager.get();
-		if (indexSearcher == null) {
-			message = "获取索引文件失败";
-			logger.error(message);
-			throw new SystemError(message);
-		}
+		IndexSearcher searcher = getIndexSearcher();
 
 		ComponentSimpleInfo component = null;
 		try {
 			TermQuery query = new TermQuery(new Term(SearchConstants.COMPONENT_ID_FIELD, String.valueOf(componentId)));
-			TopDocs topDocs = indexSearcher.search(query, 1);
+			TopDocs topDocs = searcher.search(query, 1);
 			int totalHits = topDocs.totalHits;
 			if (totalHits > 1) {
 				message = "索引中存在不止一个器件:componentId=" + componentId;
 				logger.error(message);
 				throw new SystemError(message);
 			} else if (totalHits == 1) {
-				Document document = indexSearcher.doc(topDocs.scoreDocs[0].doc);
+				Document document = searcher.doc(topDocs.scoreDocs[0].doc);
 				component = new ComponentSimpleInfo();
 				component.setId(componentId);
 				component.setCode(document.get(SearchConstants.COMPONENT_CODE_FIELD));
@@ -1045,7 +952,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 		} catch (IOException e) {
 			e.printStackTrace();
 		} finally {
-			searcherManager.release(indexSearcher);
+			searcherManager.release(searcher);
 		}
 		return component;
 	}