|
@@ -51,6 +51,8 @@ public class ElkController {
|
|
|
|
|
|
@Value("${elasticsearch.index}")
|
|
|
private String elkIndex;
|
|
|
+ @Value("${elasticsearch.index2}")
|
|
|
+ private String artIndex;
|
|
|
|
|
|
/**
|
|
|
* 搜索字段
|
|
@@ -66,11 +68,12 @@ public class ElkController {
|
|
|
* 热门字段
|
|
|
*/
|
|
|
private String hotArticle = "e_top";
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 排序字段
|
|
|
*/
|
|
|
private String publishTime = "sorttime";
|
|
|
+ private String pubTimeStr = "pubtimestr.keyword";
|
|
|
|
|
|
/**
|
|
|
* 关键词搜索
|
|
@@ -87,8 +90,8 @@ public class ElkController {
|
|
|
return SendUtil.send(false, ConstStr.REQUEST_WRONGPARAMS);
|
|
|
}
|
|
|
SearchRequest searchRequest = new SearchRequest(elkIndex);
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// 创建搜索条件
|
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
|
|
@@ -168,7 +171,7 @@ public class ElkController {
|
|
|
return SendUtil.send(true, null, map);
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public SearchHit[] getAllTitle(Integer page, Integer limit, String content, String dept) throws IOException {
|
|
|
SearchRequest searchRequest = new SearchRequest(elkIndex);
|
|
|
// 创建搜索条件
|
|
@@ -249,11 +252,11 @@ public class ElkController {
|
|
|
searchSourceBuilder.size(limit);
|
|
|
// 排序
|
|
|
// searchSourceBuilder.sort("dataid", SortOrder.ASC);
|
|
|
-
|
|
|
+
|
|
|
Script script = new Script("Math.random()");
|
|
|
ScriptSortBuilder sortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER);
|
|
|
searchSourceBuilder.sort(sortBuilder);
|
|
|
-
|
|
|
+
|
|
|
searchRequest.source(searchSourceBuilder);
|
|
|
// 执行搜索
|
|
|
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
@@ -277,7 +280,7 @@ public class ElkController {
|
|
|
public Map<String, Object> deptAll() {
|
|
|
return SendUtil.send(true, null, elkService.deptAll());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 保存提问信息
|
|
|
* @param phone
|
|
@@ -292,7 +295,7 @@ public class ElkController {
|
|
|
}
|
|
|
return SendUtil.send(elkService.saveSub(phone, remark, dept));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 分页查询提问信息
|
|
|
* @param page
|
|
@@ -314,9 +317,119 @@ public class ElkController {
|
|
|
map.put("time", time);
|
|
|
return elkService.getPageSub(map);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@GetMapping("getSubDeptAll")
|
|
|
public Map<String, Object> getSubDeptAll() {
|
|
|
return SendUtil.send(true, null, elkService.getSubDeptAll());
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 搜索热门文件库
|
|
|
+ * @param page
|
|
|
+ * @param limit
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ @GetMapping("searchHotArticle")
|
|
|
+ public Map<String, Object> searchHotArticle(Integer page, Integer limit) throws IOException {
|
|
|
+ if (!Blank.notBlank(page) || !Blank.notBlank(limit)) {
|
|
|
+ return SendUtil.send(false, ConstStr.REQUEST_WRONGPARAMS);
|
|
|
+ }
|
|
|
+ SearchRequest searchRequest = new SearchRequest(artIndex);
|
|
|
+ // 创建搜索条件
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ // 搜索热门
|
|
|
+ searchSourceBuilder.query(QueryBuilders.termQuery(hotArticle, 1));
|
|
|
+ // 开始位置
|
|
|
+ searchSourceBuilder.from((page - 1) * limit);
|
|
|
+ // 查询条数
|
|
|
+ searchSourceBuilder.size(limit);
|
|
|
+ // 排序
|
|
|
+// searchSourceBuilder.sort("dataid", SortOrder.ASC);
|
|
|
+ Script script = new Script("Math.random()");
|
|
|
+ ScriptSortBuilder sortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER);
|
|
|
+ searchSourceBuilder.sort(sortBuilder);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+ // 执行搜索
|
|
|
+ SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
|
+ SearchHit[] s = searchResponse.getHits().getHits();
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
+ for (int i = 0; i < s.length; i++) {
|
|
|
+ array.add(s[i]);
|
|
|
+ }
|
|
|
+ System.out.println(array.size());
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("array", array);
|
|
|
+// map.put("count", elkService.getAnswerCount());
|
|
|
+ return SendUtil.send(true, null, map);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 全文检索
|
|
|
+ * @param page
|
|
|
+ * @param limit
|
|
|
+ * @param content
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ @GetMapping("retrieval")
|
|
|
+ public Map<String, Object> retrieval(Integer page, Integer limit, String content) throws IOException {
|
|
|
+ if (!Blank.notBlank(page) || !Blank.notBlank(limit)) {
|
|
|
+ return SendUtil.send(false, ConstStr.REQUEST_WRONGPARAMS);
|
|
|
+ }
|
|
|
+ SearchRequest searchRequest = new SearchRequest(artIndex);
|
|
|
+ // 创建搜索条件
|
|
|
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
+ // 多条件
|
|
|
+ BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
|
|
|
+ List<QueryBuilder> list = boolQueryBuilder.must();
|
|
|
+ // 搜索标题和内容
|
|
|
+ if (Blank.notBlank(content)) {
|
|
|
+ Map<String, Float> fields = new HashMap<>(2);
|
|
|
+ fields.put(query[0], 5.0f);
|
|
|
+ fields.put(query[1], 1.0f);
|
|
|
+ list.add(QueryBuilders.multiMatchQuery(content, query).fields(fields));
|
|
|
+ }
|
|
|
+ if (Blank.notBlank(content)) {
|
|
|
+ searchSourceBuilder.query(boolQueryBuilder);
|
|
|
+ }
|
|
|
+ if (Blank.notBlank(content)) {
|
|
|
+ // 添加高亮显示
|
|
|
+ HighlightBuilder hb = new HighlightBuilder();
|
|
|
+ hb.preTags("<span style=\"color:red !important;\">");
|
|
|
+ hb.postTags("</span>");
|
|
|
+ for (int i = 0; i < query.length; i++) {
|
|
|
+ hb.field(query[i]);
|
|
|
+ }
|
|
|
+ searchSourceBuilder.highlighter(hb);
|
|
|
+ }
|
|
|
+ // 排序
|
|
|
+ searchSourceBuilder.sort("_score", SortOrder.DESC);
|
|
|
+ searchSourceBuilder.sort(pubTimeStr, SortOrder.DESC);
|
|
|
+ // 开始位置
|
|
|
+ searchSourceBuilder.from((page - 1) * limit);
|
|
|
+ // 查询条数
|
|
|
+ searchSourceBuilder.size(limit);
|
|
|
+ searchRequest.source(searchSourceBuilder);
|
|
|
+ // 执行搜索
|
|
|
+ SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
|
+ SearchHit[] s = searchResponse.getHits().getHits();
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
+ JSONArray highlightArr = new JSONArray();
|
|
|
+ for (int i = 0; i < s.length; i++) {
|
|
|
+ Map<String, HighlightField> hig = s[i].getHighlightFields();
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(s[i].toString());
|
|
|
+ JSONObject obj = jsonObject.getJSONObject("_source");
|
|
|
+ String str = JSONObject.toJSONString(obj);
|
|
|
+ highlightArr.add(JSONObject.parse(str));
|
|
|
+ for (String key : hig.keySet()){
|
|
|
+ jsonObject.getJSONObject("_source").put(key, hig.get(key).getFragments()[0].toString());
|
|
|
+ }
|
|
|
+ array.add(jsonObject);
|
|
|
+ }
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("data", array);
|
|
|
+ map.put("highlightArr", highlightArr);
|
|
|
+ return SendUtil.send(true, null, map);
|
|
|
+ }
|
|
|
}
|