From a7e798d5d788ead10966f8ca1c1629b756d493aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Mon, 15 Apr 2024 17:54:20 +0900 Subject: [PATCH] =?UTF-8?q?kcsc-back-end=20<>=20kcsc-opensearch=20?= =?UTF-8?q?=ED=86=B5=EC=8B=A0=20=EC=9E=91=EC=97=85=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?kcsc-opensearch=20<>=20opensearch=20=EB=B0=B0=ED=8F=AC=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EC=84=B8=ED=8C=85=EC=A4=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kcsc-back-end/build.gradle | 4 ++ .../config/security/SecurityConfig.java | 3 + .../kcscbackend/search/SearchController.java | 29 +++++++++ .../kcscbackend/search/model/DocContent.java | 25 ++++++++ .../kcscbackend/search/model/DocIndex.java | 23 ++++++++ .../kcscbackend/search/model/DocTitle.java | 21 +++++++ .../search/service/SearchService.java | 46 +++++++++++++++ .../main/resources/application-dev.properties | 5 ++ .../resources/application-prod.properties | 5 ++ .../src/main/resources/application.properties | 4 -- .../indexing/IndexingController.java | 59 +++++++++++++++++++ .../docSearch/DocSearchController.java | 21 +++++-- .../docSearch/service/DocSearchService.java | 12 ++-- .../scheduler/IndexingScheduler.java | 18 +++--- .../main/resources/application-dev.properties | 3 + .../resources/application-prod.properties | 3 + .../src/main/resources/application.properties | 5 +- 17 files changed, 256 insertions(+), 30 deletions(-) create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/SearchController.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocContent.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocIndex.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocTitle.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/service/SearchService.java create mode 100644 kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/indexing/IndexingController.java create mode 100644 kcsc-opensearch/src/main/resources/application-dev.properties create mode 100644 kcsc-opensearch/src/main/resources/application-prod.properties diff --git a/kcsc-back-end/build.gradle b/kcsc-back-end/build.gradle index 34a1ba0..2ca397a 100644 --- a/kcsc-back-end/build.gradle +++ b/kcsc-back-end/build.gradle @@ -89,6 +89,10 @@ dependencies { implementation 'org.apache.commons:commons-lang3' + // https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 + implementation group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.3.1' + // https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple + implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' } diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java index 5f1a557..d77ea7b 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/security/SecurityConfig.java @@ -89,6 +89,9 @@ public class SecurityConfig { /* 기준코드 조회 */ "/standardCode/**", + /* 통합검색 요청 */ + "/search/doc", + /* 관련사이트 이미지 조회 */ "/admin/config/get-site-image/**" }; diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/SearchController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/SearchController.java new file mode 100644 index 0000000..14fda3b --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/SearchController.java @@ -0,0 +1,29 @@ +package com.dbnt.kcscbackend.search; + +import com.dbnt.kcscbackend.search.model.DocTitle; +import com.dbnt.kcscbackend.search.service.SearchService; +import lombok.RequiredArgsConstructor; +import org.json.simple.JSONArray; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/search") +public class SearchController { + + private final SearchService searchService; + + @RequestMapping("/doc") + public JSONArray searchDoc( + @RequestParam(value="target", required = true) String target, + @RequestParam(value="searchText", required = true) String text, + @RequestParam(value="pageNum", required = false, defaultValue = "1") Integer pageNum, + @RequestParam(value="pageSize", required = false, defaultValue = "15") Integer pageSize + ){ + return searchService.searchRequest(target, text, pageNum, pageSize); + } +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocContent.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocContent.java new file mode 100644 index 0000000..fe67d02 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocContent.java @@ -0,0 +1,25 @@ +package com.dbnt.kcscbackend.search.model; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor + +public class DocContent { + + private Integer id; + + private String kcscCd; + + private String docNm; + + private String docYr; + + private String groupTitle; + + private String tableContent; + +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocIndex.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocIndex.java new file mode 100644 index 0000000..f314f5a --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocIndex.java @@ -0,0 +1,23 @@ +package com.dbnt.kcscbackend.search.model; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class DocIndex { + + private Integer id; + + private String kcscCd; + + private String docNm; + + private String docYr; + + private String groupTitle; + + +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocTitle.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocTitle.java new file mode 100644 index 0000000..db3b2d8 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/model/DocTitle.java @@ -0,0 +1,21 @@ +package com.dbnt.kcscbackend.search.model; + + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class DocTitle { + + private Integer id; + + private String kcscCd; + + private String docNm; + + private String docYr; + +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/service/SearchService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/service/SearchService.java new file mode 100644 index 0000000..77f661f --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/search/service/SearchService.java @@ -0,0 +1,46 @@ +package com.dbnt.kcscbackend.search.service; + +import lombok.RequiredArgsConstructor; + +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.ParseException; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.json.simple.JSONArray; +import org.json.simple.parser.JSONParser; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +@Service +@RequiredArgsConstructor +public class SearchService { + + + public JSONArray searchRequest(String target, String text, Integer pageNum, Integer pageSize) { + String uri = "http://localhost:8090"; + switch (target){ + case "title": uri+="/doc-search/doc-title?";break; + case "index": uri+="/doc-search/doc-index?";break; + case "content": uri+="/doc-search/doc-content?";break; + } + String param = "searchText="+URLEncoder.encode(text, StandardCharsets.UTF_8)+"&pageNum="+pageNum+"&pageSize="+pageSize; + try{ + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(uri+param); + httpGet.addHeader("User-Agent", "Mozilla/5.0"); + httpGet.addHeader("Content-type", "application/json;charset=UTF-8"); + CloseableHttpResponse httpResponse = httpClient.execute(httpGet); + String json = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + return (JSONArray)new JSONParser().parse(json); + } catch (IOException | ParseException e) { + throw new RuntimeException(e); + } catch (org.json.simple.parser.ParseException e) { + throw new RuntimeException(e); + } + } +} diff --git a/kcsc-back-end/src/main/resources/application-dev.properties b/kcsc-back-end/src/main/resources/application-dev.properties index 604bda4..1d463c0 100644 --- a/kcsc-back-end/src/main/resources/application-dev.properties +++ b/kcsc-back-end/src/main/resources/application-dev.properties @@ -33,3 +33,8 @@ logging.level.com.atoz_develop.mybatissample.repository=TRACE Globals.posblAtchFileSize=5242880 Globals.fileStorePath=D:\\kcscUploadFiles Globals.addedOptions=false + +#JWT +# redisConfig +spring.redis.host=localhost +spring.redis.port=6379 \ No newline at end of file diff --git a/kcsc-back-end/src/main/resources/application-prod.properties b/kcsc-back-end/src/main/resources/application-prod.properties index c2e9161..336ddca 100644 --- a/kcsc-back-end/src/main/resources/application-prod.properties +++ b/kcsc-back-end/src/main/resources/application-prod.properties @@ -36,3 +36,8 @@ logging.level.com.atoz_develop.mybatissample.repository=info Globals.posblAtchFileSize=5242880 Globals.fileStorePath=/kcscUploadFiles Globals.addedOptions=false + +#JWT +# redisConfig +spring.redis.host=localhost +spring.redis.port=6479 \ No newline at end of file diff --git a/kcsc-back-end/src/main/resources/application.properties b/kcsc-back-end/src/main/resources/application.properties index 96c2e7e..27d335f 100644 --- a/kcsc-back-end/src/main/resources/application.properties +++ b/kcsc-back-end/src/main/resources/application.properties @@ -6,10 +6,6 @@ spring.mvc.pathmatch.matching-strategy=ant_path_matcher Globals.pageUnit=10 Globals.pageSize=10 -#JWT -# redisConfig -spring.redis.host=localhost -spring.redis.port=6379 # secret key Globals.jwt.secret = qWwMroux3QtiIJcPSIZARNTZEBBnWVH0jZ2Lx7tfFChCYi0ViZllo1bekZdiU0B3FRjJI7g90n0ha120dwlz8JZU8rOkmNCe9Uq0 diff --git a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/indexing/IndexingController.java b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/indexing/IndexingController.java new file mode 100644 index 0000000..66759bb --- /dev/null +++ b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/indexing/IndexingController.java @@ -0,0 +1,59 @@ +package com.dbnt.kcscopensearch.indexing; + +import com.dbnt.kcscopensearch.kcsc.docView.model.DocContentView; +import com.dbnt.kcscopensearch.kcsc.docView.model.DocIndexView; +import com.dbnt.kcscopensearch.kcsc.docView.model.DocTitleView; +import com.dbnt.kcscopensearch.kcsc.docView.service.DocViewService; +import com.dbnt.kcscopensearch.opensearch.docSearch.model.DocContent; +import com.dbnt.kcscopensearch.opensearch.docSearch.model.DocIndex; +import com.dbnt.kcscopensearch.opensearch.docSearch.model.DocTitle; +import com.dbnt.kcscopensearch.opensearch.docSearch.service.DocSearchService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/indexing") +public class IndexingController { + private final DocViewService docViewService; + private final DocSearchService docSearchService; + + @GetMapping("/doc-title") + public String getTitleIndexing(){ + List titleViewList = docViewService.selectAllDocTitle(); + List titleList = new ArrayList<>(); + for(DocTitleView view: titleViewList){ + titleList.add(new DocTitle(view)); + } + docSearchService.saveDocTitle(titleList); + return "OK"; + } + + @GetMapping("/doc-index") + public String getIndexIndexing(){ + List indexViewList = docViewService.selectAllDocIndex(); + List indexList = new ArrayList<>(); + for(DocIndexView view: indexViewList){ + indexList.add(new DocIndex(view)); + } + docSearchService.saveDocIndex(indexList); + return "OK"; + } + + @GetMapping("/doc-content") + public String getContentIndexing(){ + List contentViewList = docViewService.selectAllDocContent(); + List contentList = new ArrayList<>(); + for(DocContentView view: contentViewList){ + contentList.add(new DocContent(view)); + } + docSearchService.saveDocContent(contentList); + return "OK"; + } + +} diff --git a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/DocSearchController.java b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/DocSearchController.java index ae562ef..52ebf0d 100644 --- a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/DocSearchController.java +++ b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/DocSearchController.java @@ -20,15 +20,24 @@ public class DocSearchController { private final DocSearchService docSearchService; @GetMapping(value="/doc-title", produces = MediaType.APPLICATION_JSON_VALUE) - public List searchTitle (@RequestParam(value="searchText", required = true) String text, @RequestParam(value="pageNum", required = true) Integer pageNum){ - return docSearchService.selectDocTitle(text, pageNum); + public List searchTitle ( + @RequestParam(value="searchText", required = true) String text, + @RequestParam(value="pageNum", required = false, defaultValue = "1") Integer pageNum, + @RequestParam(value="pageSize", required = false, defaultValue = "15") Integer pageSize){ + return docSearchService.selectDocTitle(text, pageNum, pageSize); } @GetMapping(value="/doc-index", produces = MediaType.APPLICATION_JSON_VALUE) - public List searchIndex (@RequestParam(value="searchText", required = true) String text, @RequestParam(value="pageNum", required = true) Integer pageNum){ - return docSearchService.selectDocIndex(text, pageNum); + public List searchIndex ( + @RequestParam(value="searchText", required = true) String text, + @RequestParam(value="pageNum", required = false, defaultValue = "1") Integer pageNum, + @RequestParam(value="pageSize", required = false, defaultValue = "15") Integer pageSize){ + return docSearchService.selectDocIndex(text, pageNum, pageSize); } @GetMapping(value="/doc-content", produces = MediaType.APPLICATION_JSON_VALUE) - public List searchContent (@RequestParam(value="searchText", required = true) String text, @RequestParam(value="pageNum", required = true) Integer pageNum){ - return docSearchService.selectDocContent(text, pageNum); + public List searchContent ( + @RequestParam(value="searchText", required = true) String text, + @RequestParam(value="pageNum", required = false, defaultValue = "1") Integer pageNum, + @RequestParam(value="pageSize", required = false, defaultValue = "15") Integer pageSize){ + return docSearchService.selectDocContent(text, pageNum, pageSize); } } diff --git a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/service/DocSearchService.java b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/service/DocSearchService.java index 69b8187..fd7e57b 100644 --- a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/service/DocSearchService.java +++ b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/opensearch/docSearch/service/DocSearchService.java @@ -123,15 +123,15 @@ public class DocSearchService { log.info("contentIndexing end"); } - public List selectDocTitle(String text, Integer pageNum) { - return titleRepository.findByDocNmContains(text, PageRequest.of(pageNum, 20)); + public List selectDocTitle(String text, Integer pageNum, Integer pageSize) { + return titleRepository.findByDocNmContains(text, PageRequest.of(pageNum, pageSize)); } - public List selectDocIndex(String text, Integer pageNum){ - return indexRepository.findByGroupTitleContains(text, PageRequest.of(pageNum, 20)); + public List selectDocIndex(String text, Integer pageNum, Integer pageSize){ + return indexRepository.findByGroupTitleContains(text, PageRequest.of(pageNum, pageSize)); } - public List selectDocContent(String text, Integer pageNum){ - return contentRepository.findByTableContentContains(text, PageRequest.of(pageNum, 20)); + public List selectDocContent(String text, Integer pageNum, Integer pageSize){ + return contentRepository.findByTableContentContains(text, PageRequest.of(pageNum, pageSize)); } } diff --git a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/scheduler/IndexingScheduler.java b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/scheduler/IndexingScheduler.java index 7011534..9b1df76 100644 --- a/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/scheduler/IndexingScheduler.java +++ b/kcsc-opensearch/src/main/java/com/dbnt/kcscopensearch/scheduler/IndexingScheduler.java @@ -21,7 +21,7 @@ public class IndexingScheduler { private final DocViewService docViewService; private final DocSearchService docSearchService; - @Scheduled(cron = "40 18 23 * * *") + /*@Scheduled(cron = "40 18 23 * * *") public void viewIndexing(){ Map> viewDataMap = docViewService.selectAllView(); Map> indexingDataMap = new HashMap<>(); @@ -57,12 +57,10 @@ public class IndexingScheduler { } docSearchService.save(indexingDataMap); + }*/ - //docSearchService.save(indexingDataMap); - } - - @Scheduled(cron = "40 20 23 * * *") - public void titleIndexing(){ + @Scheduled(cron = "40 1 2 * * *") + public void ScheduledTitleIndexing(){ List titleViewList = docViewService.selectAllDocTitle(); List titleList = new ArrayList<>(); for(DocTitleView view: titleViewList){ @@ -70,8 +68,8 @@ public class IndexingScheduler { } docSearchService.saveDocTitle(titleList); } - @Scheduled(cron = "40 21 23 * * *") - public void indexIndexing(){ + @Scheduled(cron = "40 2 2 * * *") + public void ScheduledIndexIndexing(){ List indexViewList = docViewService.selectAllDocIndex(); List indexList = new ArrayList<>(); for(DocIndexView view: indexViewList){ @@ -79,8 +77,8 @@ public class IndexingScheduler { } docSearchService.saveDocIndex(indexList); } - @Scheduled(cron = "40 25 23 * * *") - public void contentIndexing(){ + @Scheduled(cron = "40 7 2 * * *") + public void ScheduledContentIndexing(){ List contentViewList = docViewService.selectAllDocContent(); List contentList = new ArrayList<>(); for(DocContentView view: contentViewList){ diff --git a/kcsc-opensearch/src/main/resources/application-dev.properties b/kcsc-opensearch/src/main/resources/application-dev.properties new file mode 100644 index 0000000..0126223 --- /dev/null +++ b/kcsc-opensearch/src/main/resources/application-dev.properties @@ -0,0 +1,3 @@ +opensearch.uris=https://localhost:9200 +opensearch.username=admin +opensearch.password=kpbP7ECsaTlgvfmaGNBtORH75QHf7TmJhHZdW7Z7 \ No newline at end of file diff --git a/kcsc-opensearch/src/main/resources/application-prod.properties b/kcsc-opensearch/src/main/resources/application-prod.properties new file mode 100644 index 0000000..8f4c3c1 --- /dev/null +++ b/kcsc-opensearch/src/main/resources/application-prod.properties @@ -0,0 +1,3 @@ +opensearch.uris=https://kcsc.dbnt.co.kr:9200 +opensearch.username=admin +opensearch.password=kpbP7ECsaTlgvfmaGNBtORH75QHf7TmJhHZdW7Z7 \ No newline at end of file diff --git a/kcsc-opensearch/src/main/resources/application.properties b/kcsc-opensearch/src/main/resources/application.properties index ce0d122..0a755b0 100644 --- a/kcsc-opensearch/src/main/resources/application.properties +++ b/kcsc-opensearch/src/main/resources/application.properties @@ -1,8 +1,5 @@ spring.application.name=kcsc-opensearch - -opensearch.uris=https://localhost:9200 -opensearch.username=admin -opensearch.password=kpbP7ECsaTlgvfmaGNBtORH75QHf7TmJhHZdW7Z7 +server.port=8090 spring.datasource-kcsc.driverClassName=org.postgresql.Driver spring.datasource-kcsc.jdbcUrl=jdbc:postgresql://118.219.150.34:50503/kcsc