|
@@ -1,6 +1,9 @@
|
|
|
package cn.cslg.pas.service.business.es;
|
|
|
|
|
|
import cn.cslg.pas.common.dto.PatentDTO;
|
|
|
+import cn.cslg.pas.common.model.request.MapRequest;
|
|
|
+import cn.cslg.pas.common.model.request.QueryRequest;
|
|
|
+import cn.cslg.pas.common.model.request.StringRequest;
|
|
|
import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
|
|
|
import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
|
|
|
import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
|
|
@@ -23,6 +26,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
|
|
|
@Service
|
|
@@ -97,13 +101,37 @@ public class EsService {
|
|
|
|
|
|
/**
|
|
|
* Es检索
|
|
|
- * @param searchCondition 检索条件
|
|
|
- * @param page 检索页码
|
|
|
- * @param size 页大小
|
|
|
- * @param orderFields 排序字段
|
|
|
+ *
|
|
|
+ * @param queryRequest 检索条件
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<PatentDTO> esSearch(String searchCondition, Integer page, Integer size, List<String> orderFields) throws Exception {
|
|
|
+ public PatentDTO esSearch(QueryRequest queryRequest) throws Exception {
|
|
|
+ PatentDTO dto = new PatentDTO();
|
|
|
+
|
|
|
+ String searchCondition = "";
|
|
|
+ Integer projectId = queryRequest.getProjectId();
|
|
|
+ Long current = queryRequest.getCurrent();
|
|
|
+ Long size = queryRequest.getSize();
|
|
|
+ if (queryRequest instanceof StringRequest) {
|
|
|
+ searchCondition = ((StringRequest) queryRequest).getSearchQuery();
|
|
|
+ } else if (queryRequest instanceof MapRequest) {
|
|
|
+ Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
|
|
|
+ for (String key : map.keySet()) {
|
|
|
+ Object value = map.get(key);
|
|
|
+ if (searchCondition != "") {
|
|
|
+ searchCondition = "AND" + key + "=" + value;
|
|
|
+ } else {
|
|
|
+ searchCondition = key + "=" + value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (projectId != null) {
|
|
|
+ if (searchCondition != null && searchCondition != "") {
|
|
|
+ searchCondition = "projectId = " + projectId + " AND " + searchCondition;
|
|
|
+ } else {
|
|
|
+ searchCondition = "projectId = " + projectId;
|
|
|
+ }
|
|
|
+ }
|
|
|
SearchRequest.Builder builder = new SearchRequest.Builder();
|
|
|
//设置查询索引
|
|
|
builder.index("patent");
|
|
@@ -111,11 +139,11 @@ public class EsService {
|
|
|
treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
|
|
|
//格式化检索式
|
|
|
//3. 从es中检索数据
|
|
|
- Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "esConfig");
|
|
|
+ Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
|
|
|
//4. 返回数据
|
|
|
//分页
|
|
|
- if (page != null && size != null) {
|
|
|
- builder.from(page).size(size);
|
|
|
+ if (current != null && size != null) {
|
|
|
+ builder.from(current.intValue()).size(size.intValue());
|
|
|
}
|
|
|
builder.query(q);
|
|
|
//排序
|
|
@@ -124,19 +152,17 @@ public class EsService {
|
|
|
.field("public_date").order(SortOrder.Desc)));
|
|
|
|
|
|
SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
- List<PatentDTO> list = new ArrayList<>();
|
|
|
+ List<Patent> list = new ArrayList<>();
|
|
|
List<Hit<Patent>> hits = response.hits().hits();
|
|
|
-
|
|
|
+ long total = response.hits().total().value();
|
|
|
for (Hit<Patent> hit : hits) {
|
|
|
- PatentDTO dto = new PatentDTO();
|
|
|
- long total = response.hits().total().value();
|
|
|
Patent esMess = hit.source();
|
|
|
- BeanUtils.copyProperties(esMess, dto);
|
|
|
- dto.setTotal(total);
|
|
|
- list.add(dto);
|
|
|
+ list.add(esMess);
|
|
|
}
|
|
|
+ dto.setTotal(total);
|
|
|
+ dto.setPatents(list);
|
|
|
|
|
|
- return list;
|
|
|
+ return dto;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -153,7 +179,7 @@ public class EsService {
|
|
|
//组装查询条件
|
|
|
BoolQuery.Builder boolQuery = new BoolQuery.Builder();
|
|
|
boolQuery.should(q -> q.match(v -> v
|
|
|
- .query(key)
|
|
|
+ .query(key)
|
|
|
//字段名
|
|
|
.field("patent_no")
|
|
|
));
|