|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 判断搜索词是否为无效的(比如只包含特殊字符,不含有任何字母、数字、汉字等有意义的字符)
|
|
|
*
|