|
|
@@ -23,8 +23,10 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
+import com.uas.search.console.model.EnterpriseSimpleInfo;
|
|
|
+import com.uas.search.console.model.OrderDetailSimpleInfo;
|
|
|
+import com.uas.search.console.model.OrderSimpleInfo;
|
|
|
import com.uas.search.console.service.InnerOrderSearchService;
|
|
|
-import com.uas.search.console.support.IndexSearcherManager;
|
|
|
import com.uas.search.console.util.OrderSearchUtils;
|
|
|
import com.uas.search.console.util.SearchConstants;
|
|
|
import com.uas.search.console.util.SearchUtils;
|
|
|
@@ -44,10 +46,6 @@ import com.uas.search.utils.OrderSearchConstants;
|
|
|
*/
|
|
|
@Service
|
|
|
public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSearchService {
|
|
|
- /**
|
|
|
- * 默认搜索的最大的记录条数
|
|
|
- */
|
|
|
- private static final int TOP_NUM = 1024 * 1024 * 1024;
|
|
|
|
|
|
/**
|
|
|
* 默认的页码
|
|
|
@@ -59,8 +57,6 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
*/
|
|
|
private static final int PAGE_SIZE = 20;
|
|
|
|
|
|
- private static IndexSearcherManager searcherManager = new IndexSearcherManager();
|
|
|
-
|
|
|
private Logger logger = Logger.getLogger(getClass());
|
|
|
|
|
|
@Override
|
|
|
@@ -79,7 +75,6 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
|
|
|
@Override
|
|
|
public SPage<BaseOrder> searchOrderIds(String keyword, PageParams params) {
|
|
|
- logger.info("main");
|
|
|
return searchMainTable(keyword, params, SearchConstants.ORDER_TABLE_NAME);
|
|
|
}
|
|
|
|
|
|
@@ -113,7 +108,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
if (SearchUtils.isKeywordInvalid(keyword)) {
|
|
|
throw new SearchException("搜索关键词无效:" + keyword);
|
|
|
}
|
|
|
- IndexSearcher indexSearcher = getIndexSearcher();
|
|
|
+ IndexSearcher indexSearcher = SearchUtils.getIndexSearcher();
|
|
|
// 获取该表keyword可以搜索的域
|
|
|
List<String> keywordFields = OrderSearchUtils.getKeywordFields(tableName);
|
|
|
|
|
|
@@ -203,7 +198,6 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
TopDocs previousTopDocs = indexSearcher.search(booleanQuery, (sPage.getPage() - 1) * sPage.getSize());
|
|
|
int totalHits = previousTopDocs.totalHits;
|
|
|
ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
|
|
|
- logger.info(previousScoreDocs == null || previousScoreDocs.length == 0);
|
|
|
// 如果主表中未匹配到结果,再搜索其明细表
|
|
|
if (totalHits == 0) {
|
|
|
return searchDetailTable(keyword, params, OrderSearchUtils.getDetailTableName(tableName));
|
|
|
@@ -247,7 +241,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
} catch (NumberFormatException | IOException e) {
|
|
|
throw new SearchException(e).setDetailedMessage(e);
|
|
|
} finally {
|
|
|
- searcherManager.release(indexSearcher);
|
|
|
+ SearchUtils.releaseIndexSearcher(indexSearcher);
|
|
|
}
|
|
|
return sPage;
|
|
|
}
|
|
|
@@ -267,7 +261,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
if (SearchUtils.isKeywordInvalid(keyword)) {
|
|
|
throw new SearchException("搜索关键词无效:" + keyword);
|
|
|
}
|
|
|
- IndexSearcher indexSearcher = getIndexSearcher();
|
|
|
+ IndexSearcher indexSearcher = SearchUtils.getIndexSearcher();
|
|
|
List<String> keywordFields = OrderSearchUtils.getKeywordFields(tableName);
|
|
|
|
|
|
SPage<BaseOrder> sPage = new SPage<>();
|
|
|
@@ -366,7 +360,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
} catch (NumberFormatException | IOException e) {
|
|
|
throw new SearchException(e).setDetailedMessage(e);
|
|
|
} finally {
|
|
|
- searcherManager.release(indexSearcher);
|
|
|
+ SearchUtils.releaseIndexSearcher(indexSearcher);
|
|
|
}
|
|
|
return sPage;
|
|
|
}
|
|
|
@@ -384,7 +378,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
if (id == null) {
|
|
|
return null;
|
|
|
}
|
|
|
- List<Document> documents = getDocuments(OrderSearchUtils.getDetailTableForeignIdField(tableName),
|
|
|
+ List<Document> documents = SearchUtils.getDocuments(OrderSearchUtils.getDetailTableForeignIdField(tableName),
|
|
|
id.toString());
|
|
|
List<BaseOrderDetail> baseOrderDetails = new ArrayList<>();
|
|
|
for (Document document : documents) {
|
|
|
@@ -417,7 +411,8 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
BaseOrder baseOrder = new BaseOrder();
|
|
|
List<BaseOrderDetail> baseOrderDetails = map.get(key);
|
|
|
baseOrder.setDetails(baseOrderDetails);
|
|
|
- List<Document> documents = getDocuments(OrderSearchUtils.getIdField(tableName), Long.toString(key));
|
|
|
+ List<Document> documents = SearchUtils.getDocuments(OrderSearchUtils.getIdField(tableName),
|
|
|
+ Long.toString(key));
|
|
|
if (CollectionUtils.isEmpty(documents)) {
|
|
|
logger.error("明细表中外键" + key + "对应的主表索引不存在");
|
|
|
continue;
|
|
|
@@ -436,48 +431,45 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
|
|
|
return baseOrders;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取IndexSearcher对象,若为空,抛出异常
|
|
|
- *
|
|
|
- * @return IndexSearcher对象
|
|
|
- */
|
|
|
- private IndexSearcher getIndexSearcher() {
|
|
|
- searcherManager.maybeReopen();
|
|
|
- IndexSearcher indexSearcher = searcherManager.get();
|
|
|
- if (indexSearcher == null) {
|
|
|
- throw new SearchException("获取索引文件失败");
|
|
|
+ @Override
|
|
|
+ public OrderSimpleInfo getOrder(Long id) {
|
|
|
+ OrderSimpleInfo order = null;
|
|
|
+ Document document = SearchUtils.getDocumentById(SearchConstants.ORDER_ID_FIELD, id);
|
|
|
+ if (document != null) {
|
|
|
+ order = new OrderSimpleInfo();
|
|
|
+ order.setId(id);
|
|
|
+ order.setCode(document.get(SearchConstants.ORDER_CODE_FIELD));
|
|
|
+ order.setBuyeruu(Long.valueOf(document.get(SearchConstants.ORDER_BUYERUU_FIELD)));
|
|
|
+ order.setBuyername(document.get(SearchConstants.ORDER_BUYERNAME_FIELD));
|
|
|
+ EnterpriseSimpleInfo buyerEnterprise = new EnterpriseSimpleInfo();
|
|
|
+ buyerEnterprise.setUu(Long.valueOf(document.get(SearchConstants.ORDER_BUYERENUU_FIELD)));
|
|
|
+ buyerEnterprise.setEnName(document.get(SearchConstants.ORDER_BUYERENNAME_FIELD));
|
|
|
+ order.setBuyerEnterprise(buyerEnterprise);
|
|
|
+ EnterpriseSimpleInfo sellerEnterprise = new EnterpriseSimpleInfo();
|
|
|
+ sellerEnterprise.setUu(Long.valueOf(document.get(SearchConstants.ORDER_SELLERENUU_FIELD)));
|
|
|
+ sellerEnterprise.setEnName(document.get(SearchConstants.ORDER_SELLERENNAME_FIELD));
|
|
|
+ order.setSellerEnterprise(sellerEnterprise);
|
|
|
+ Date createtime = new Date(Long.valueOf(document.get(SearchConstants.ORDER_CREATETIME_FIELD)));
|
|
|
+ order.setCreatetime(createtime);
|
|
|
}
|
|
|
- return indexSearcher;
|
|
|
+ return order;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 根据域和搜索词获取Document列表
|
|
|
- *
|
|
|
- * @param field
|
|
|
- * 搜索域
|
|
|
- * @param keyword
|
|
|
- * 搜索词
|
|
|
- * @return Document列表
|
|
|
- */
|
|
|
- private List<Document> getDocuments(String field, String keyword) {
|
|
|
- if (StringUtils.isEmpty(field) || StringUtils.isEmpty(keyword)) {
|
|
|
- throw new SearchException("搜索的域和搜索词不能为空");
|
|
|
- }
|
|
|
- IndexSearcher indexSearcher = getIndexSearcher();
|
|
|
- List<Document> documents = new ArrayList<>();
|
|
|
- TermQuery termQuery = new TermQuery(new Term(field, String.valueOf(keyword)));
|
|
|
- try {
|
|
|
- TopDocs topDocs = indexSearcher.search(termQuery, TOP_NUM);
|
|
|
- ScoreDoc[] scoreDocs = topDocs.scoreDocs;
|
|
|
- for (ScoreDoc scoreDoc : scoreDocs) {
|
|
|
- documents.add(indexSearcher.doc(scoreDoc.doc));
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- throw new SearchException(e);
|
|
|
- } finally {
|
|
|
- searcherManager.release(indexSearcher);
|
|
|
+ @Override
|
|
|
+ public OrderDetailSimpleInfo getOrderDetail(Long id) {
|
|
|
+ OrderDetailSimpleInfo orderDetail = null;
|
|
|
+ Document document = SearchUtils.getDocumentById(SearchConstants.ORDER_DETAIL_ID_FIELD, id);
|
|
|
+ if (document != null) {
|
|
|
+ orderDetail = new OrderDetailSimpleInfo();
|
|
|
+ orderDetail.setId(id);
|
|
|
+ orderDetail.setCode(document.get(SearchConstants.ORDER_DETAIL_CODE_FIELD));
|
|
|
+ orderDetail.setOrderid(Long.valueOf(document.get(SearchConstants.ORDER_DETAIL_ORDERID_FIELD)));
|
|
|
+ orderDetail.setDetno(Short.valueOf(document.get(SearchConstants.ORDER_DETAIL_DETNO_FIELD)));
|
|
|
+ orderDetail.setCmpCode(document.get(SearchConstants.ORDER_DETAIL_COMPONENTCODE_FIELD));
|
|
|
+ orderDetail.setKiName(document.get(SearchConstants.ORDER_DETAIL_KINDNAME_FIELD));
|
|
|
+ orderDetail.setBrName(document.get(SearchConstants.ORDER_DETAIL_BRANDNAME_FIELD));
|
|
|
}
|
|
|
- return documents;
|
|
|
+ return orderDetail;
|
|
|
}
|
|
|
|
|
|
}
|