Browse Source

增加根据属性值的rowid获取其所属器件的rowid的接口

sunyj 9 years ago
parent
commit
5a55d89c84

+ 9 - 0
search-api/src/main/java/com/uas/search/service/SearchService.java

@@ -163,4 +163,13 @@ public interface SearchService {
 	public List<Map<String, String>> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword,
 			Long topNum);
 
+	/**
+	 * 根据属性值的rowid获取其所属器件的rowid
+	 * 
+	 * @param rowid
+	 *            属性值的rowid
+	 * @return 器件rowid
+	 */
+	public String getComponentRowidByPropertyValueRowid(String rowid);
+
 }

+ 1 - 1
search-console/src/main/java/com/uas/search/console/dao/ComponentSimpleInfoDao.java

@@ -33,7 +33,7 @@ public interface ComponentSimpleInfoDao
 	 * @param rowid
 	 * @return
 	 */
-	public ComponentSimpleInfo findByRowid(@Param("rowid") String rowid);
+	public ComponentSimpleInfo findByRowid(String rowid);
 
 	/**
 	 * 根据类目kindid获取器件

+ 32 - 0
search-console/src/main/java/com/uas/search/console/service/impl/SearchServiceImpl.java

@@ -885,6 +885,38 @@ public class SearchServiceImpl implements SearchService {
 		return booleanQuery;
 	}
 
+	@Override
+	public String getComponentRowidByPropertyValueRowid(String rowid) {
+		String message = "";
+		if (isKeywordInvalid(rowid)) {
+			message = "输入无效:" + rowid;
+			logger.error(message);
+			throw new SystemError(message);
+		}
+		searcherManager.maybeReopen();
+		IndexSearcher indexSearcher = searcherManager.get();
+		if (indexSearcher == null) {
+			message = "获取索引文件失败";
+			logger.error(message);
+			throw new SystemError(message);
+		}
+
+		PrefixQuery query = new PrefixQuery(new Term(rowid, ""));
+		try {
+			TopDocs topDocs = indexSearcher.search(query, TOP_NUM);
+			if (topDocs.totalHits != 0) {
+				logger.error("属性值rowid为 " + rowid + " 的器件数量不正确: totalHits " + topDocs.totalHits);
+			}
+			Document document = indexSearcher.doc(topDocs.scoreDocs[0].doc);
+			return document.get(SearchConstants.COMPONENT_ROWID_FIELD);
+		} catch (NumberFormatException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
 	/**
 	 * 判断搜索词是否为无效的(比如只包含特殊字符,不含有任何字母、数字、汉字等有意义的字符)
 	 * 

+ 5 - 3
search-console/src/main/java/com/uas/search/console/util/SearchConstants.java

@@ -1,5 +1,7 @@
 package com.uas.search.console.util;
 
+import java.io.File;
+
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.wltea.analyzer.lucene.IKAnalyzer;
@@ -56,12 +58,12 @@ public class SearchConstants {
 	/**
 	 * 索引文件存储路径
 	 */
-	public static final String INDEX_DIR = PathUtils.getFilePath() + "indexes";
+	public static final String INDEX_DIR = PathUtils.getFilePath() + "indexes" + File.separator;
 
 	/**
-	 * 存放带有属性的器件数据的文件,用于创建索引
+	 * 该文件夹下存放器件数据,用于创建索引
 	 */
-	public static final String COMPONENT_WITH_PROPERTY_DIR = PathUtils.getFilePath() + "components";
+	public static final String COMPONENT_DATA_DIR = PathUtils.getFilePath() + "data" + File.separator;
 
 	/**
 	 * 各索引字段的字符标示