2471 lines
86 KiB
Java
2471 lines
86 KiB
Java
package kccf.sch.service.impl;
|
|
|
|
import static kccf.sch.common.WNDefine.*;
|
|
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.net.URLEncoder;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import kccf.sch.common.WNSearch;
|
|
import kccf.sch.common.WNUtils;
|
|
import kccf.sch.service.SearchCollectionResult;
|
|
import kccf.sch.service.SearchService;
|
|
import kccf.sch.service.vo.SearchCollectionVO;
|
|
import kccf.sch.service.vo.SearchVO;
|
|
import kccf.sch.service.vo.Sf1VO;
|
|
|
|
import org.apache.commons.lang3.StringEscapeUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@Service("searchService")
|
|
public class SearchServiceImpl implements SearchService{
|
|
|
|
/** SearchDAO
|
|
@Resource(name="searchDAO")
|
|
SearchDAO searchDAO;
|
|
*/
|
|
|
|
/** LOGGER */
|
|
@SuppressWarnings("unused")
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(SearchServiceImpl.class);
|
|
|
|
|
|
|
|
/** 검색 결과 받기 */
|
|
@Override
|
|
public SearchCollectionResult getSearch(SearchVO searchVO, Sf1VO sf1Vo) throws Exception {
|
|
try{
|
|
boolean isDebug = true; //디버그 설정
|
|
String[] collections = null;
|
|
String[] searchFields = null;
|
|
boolean isRealTimeKeyword = false;
|
|
boolean useSuggestedQuery = true;
|
|
|
|
String exquery= "";
|
|
String strOperation ="";
|
|
String exquery_info="";
|
|
|
|
|
|
/** 검색어 */
|
|
String query = searchVO.getQuery();
|
|
query = StringEscapeUtils.unescapeHtml4(query);
|
|
query = WNUtils.checkReqXSS(query, "");
|
|
searchVO.setQuery(query);
|
|
|
|
/** 결과내 검색어 */
|
|
String realQuery = searchVO.getRealQuery();
|
|
realQuery = StringEscapeUtils.unescapeHtml4(realQuery);
|
|
realQuery = WNUtils.checkReqXSS(realQuery, "");
|
|
|
|
String reQuery = searchVO.getReQuery();
|
|
reQuery = StringEscapeUtils.unescapeHtml4(reQuery);
|
|
reQuery = WNUtils.checkReqXSS(reQuery, "");
|
|
searchVO.setReQuery(reQuery);
|
|
|
|
/** 결과내 재검색 체크필드 */
|
|
String rt = searchVO.getRt();
|
|
rt = StringEscapeUtils.unescapeHtml4(rt);
|
|
|
|
if(!reQuery.equals("")){
|
|
rt = WNUtils.checkReqXSS(rt, "1");
|
|
}else{
|
|
rt = WNUtils.checkReqXSS(rt, "");
|
|
}
|
|
|
|
|
|
/** 정렬조건 */
|
|
String sortField = searchVO.getSortField();
|
|
sortField = WNUtils.checkReqXSS(sortField, "RANK/DESC");
|
|
searchVO.setSortField(sortField);
|
|
|
|
/** 검색 필드*/
|
|
String searchField = searchVO.getSearchField();
|
|
searchField = WNUtils.checkReqXSS(searchField, "ALL");
|
|
|
|
|
|
/** 검색 시작날짜 */
|
|
String startDate = searchVO.getStartDate();
|
|
startDate = WNUtils.checkReqXSS(startDate, "1970/01/01");
|
|
|
|
/** 검색 종료날짜*/
|
|
String endDate = searchVO.getEndDate();
|
|
endDate = WNUtils.checkReqXSS(endDate, WNUtils.getCurrentDate());
|
|
|
|
/** 컬렉션 이름*/
|
|
String collection = searchVO.getCollection();
|
|
if("".equals(collection)) searchVO.setCollection("ALL");
|
|
collection = WNUtils.checkReqXSS(collection, "ALL");
|
|
|
|
|
|
/** 시작위치 */
|
|
int startCount = searchVO.getStartCount();
|
|
if(startCount == 0 || collection.equals("ALL") || collection.equals("")){
|
|
startCount =1;
|
|
}
|
|
|
|
|
|
/** 출력갯수 */
|
|
int viewCount = searchVO.getViewCount();
|
|
if ( collection.equals("ALL") || collection.equals("") ||viewCount == 0){
|
|
viewCount = 4;
|
|
}
|
|
|
|
/** 디버그 YN*/
|
|
String debug = searchVO.getDebug();
|
|
debug = WNUtils.checkReqXSS(debug, "Y");
|
|
|
|
/** 검색 연산자**/
|
|
String operator = searchVO.getOperator();
|
|
operator = WNUtils.checkReqXSS(operator, "N");
|
|
String tmpQuery = query;
|
|
if("OR".equals(operator)){
|
|
tmpQuery = tmpQuery.replaceAll(" ", "|");
|
|
}
|
|
|
|
/*********************고급 검색*********************************/
|
|
//정확히 일치
|
|
String exactQuery = searchVO.getExactQuery();
|
|
exactQuery = StringEscapeUtils.unescapeHtml4(exactQuery);
|
|
exactQuery = WNUtils.checkReqXSS(exactQuery, "");
|
|
searchVO.setExactQuery(exactQuery);
|
|
if(!exactQuery.equals("")){
|
|
tmpQuery += "\"" + exactQuery + "\"";
|
|
}
|
|
|
|
//반드시 포함
|
|
String andQuery = searchVO.getAndQuery();
|
|
andQuery = StringEscapeUtils.unescapeHtml4(andQuery);
|
|
andQuery = WNUtils.checkReqXSS(andQuery, "");
|
|
searchVO.setAndQuery(andQuery);
|
|
if(!andQuery.equals("")){
|
|
tmpQuery += " " + andQuery +"" ;
|
|
}
|
|
|
|
//포함하지 않는
|
|
String notQuery = searchVO.getNotQuery();
|
|
notQuery = StringEscapeUtils.unescapeHtml4(notQuery);
|
|
notQuery = WNUtils.checkReqXSS(notQuery, "");
|
|
searchVO.setNotQuery(notQuery);
|
|
if(!notQuery.equals("")){
|
|
tmpQuery += "!" + notQuery +"";
|
|
}
|
|
|
|
|
|
/**********************상세 검색*********************************/
|
|
//상세검색 - 관리번호(입력)
|
|
String mgnt_no = searchVO.getMgnt_no();
|
|
mgnt_no = StringEscapeUtils.unescapeHtml4(mgnt_no);
|
|
mgnt_no = WNUtils.checkReqXSS(mgnt_no, "");
|
|
//searchVO.setMgnt_no(mgnt_no);
|
|
if ( !mgnt_no.equals("") ) {
|
|
exquery += "<MGNT_NO:contains:" + mgnt_no + "> ";
|
|
}
|
|
|
|
//상세검색 - 시대(선택)
|
|
String trs_age = searchVO.getTrs_age();
|
|
trs_age = StringEscapeUtils.unescapeHtml4(trs_age);
|
|
trs_age = WNUtils.checkReqXSS(trs_age, "");
|
|
trs_age = trs_age.replace(",","|");
|
|
if ( !trs_age.equals("") ) {
|
|
if(trs_age.indexOf("ALL") == -1){
|
|
exquery += "<TRS_AGE:contains:" + trs_age + "> ";
|
|
}
|
|
}
|
|
|
|
//상세검색 - 주제분야(선택)
|
|
String second_category = searchVO.getSecond_category();
|
|
second_category = StringEscapeUtils.unescapeHtml4(second_category);
|
|
second_category = WNUtils.checkReqXSS(second_category, "");
|
|
second_category = second_category.replace(",","|");
|
|
if ( !second_category.equals("") ) {
|
|
exquery += "<SECOND_CATEGORY:contains:" + second_category + "> ";
|
|
}
|
|
|
|
//상세검색 - 문화테마(선택)
|
|
String series_cd = searchVO.getSeries_cd();
|
|
series_cd = StringEscapeUtils.unescapeHtml4(series_cd);
|
|
series_cd = WNUtils.checkReqXSS(series_cd, "");
|
|
series_cd = series_cd.replace(",","|");
|
|
if ( !series_cd.equals("") ) {
|
|
exquery += "<SEARCH_THEME_CD:contains:" + series_cd + "> "; //역사문화유산^유교
|
|
}
|
|
|
|
|
|
//상세검색 - 자료유형(선택)
|
|
String second_class = searchVO.getSecond_class();
|
|
second_class = StringEscapeUtils.unescapeHtml4(second_class);
|
|
second_class = WNUtils.checkReqXSS(second_class, "");
|
|
second_class = second_class.replace(",","|");
|
|
if ( !second_class.equals("") ) {
|
|
exquery += "<SECOND_CLASS:contains:" + second_class + "> ";
|
|
}
|
|
|
|
//상세검색 - 지역/문화원(선택)
|
|
String sojang_council = searchVO.getSojang_council();
|
|
sojang_council = StringEscapeUtils.unescapeHtml4(sojang_council);
|
|
sojang_council = WNUtils.checkReqXSS(sojang_council, "");
|
|
sojang_council = sojang_council.replace(",","|");
|
|
if ( !sojang_council.equals("") && !sojang_council.equals("|")) {
|
|
exquery += "<SOJANG_COUNCIL:contains:" + sojang_council + "> ";
|
|
}
|
|
|
|
//상세검색 - 지역 (지역문화정보)
|
|
String search_area_council_info = searchVO.getSearch_area_council_info();
|
|
search_area_council_info = StringEscapeUtils.unescapeHtml4(search_area_council_info);
|
|
search_area_council_info = WNUtils.checkReqXSS(search_area_council_info, "");
|
|
search_area_council_info = search_area_council_info.replace(",","|");
|
|
if ( !search_area_council_info.equals("") && !search_area_council_info.equals("|")) {
|
|
exquery_info+= "<SEARCH_AREA_COUNCIL_INFO:contains:" + search_area_council_info + "> ";
|
|
}
|
|
|
|
//상세검색 - 유형 (지역문화정보)
|
|
String content_type = searchVO.getContent_type();
|
|
content_type = StringEscapeUtils.unescapeHtml4(content_type);
|
|
content_type = WNUtils.checkReqXSS(content_type, "");
|
|
content_type = content_type.replace(",","|");
|
|
if ( !content_type.equals("") && !content_type.equals("|")) {
|
|
exquery_info += "<CONTENT_TYPE_NAME:contains:" + content_type + "> ";
|
|
}
|
|
|
|
|
|
//상세검색 - 발행년도(기간)
|
|
String genyear_start = searchVO.getGenyear_start();
|
|
genyear_start = WNUtils.checkReqXSS(genyear_start, "");
|
|
if( !genyear_start.equals("")) {
|
|
strOperation += "<GENYEAR:gte:" + genyear_start + "> ";
|
|
}
|
|
|
|
String genyear_end = searchVO.getGenyear_end();
|
|
genyear_end = WNUtils.checkReqXSS(genyear_end, "");
|
|
if( !genyear_end.equals("")) {
|
|
strOperation += "<GENYEAR:lte:" + genyear_end + ">";
|
|
}
|
|
|
|
//상세검색 - 연대(기간)
|
|
String chronological_start = searchVO.getChronological_start();
|
|
chronological_start = WNUtils.checkReqXSS(chronological_start, "");
|
|
if( !chronological_start.equals("")) {
|
|
strOperation += "<CHRONOLOGICAL_START:gte:" + chronological_start + "> ";
|
|
}
|
|
|
|
String chronological_end = searchVO.getChronological_end();
|
|
chronological_end = WNUtils.checkReqXSS(chronological_end, "");
|
|
if( !chronological_end.equals("")) {
|
|
strOperation += "<CHRONOLOGICAL_END:lte:" + chronological_end + ">";
|
|
}
|
|
|
|
/** 상세검색 컬렉션 체크박스
|
|
String chkColls = searchVO.getChkColls();
|
|
chkColls = WNUtils.checkReqXSS(chkColls, "");
|
|
*/
|
|
|
|
//쿼리 설정
|
|
if (rt.equals("1")) {
|
|
realQuery = tmpQuery + " (" + reQuery+")"; //realQuery
|
|
} else if (!rt.equals("1") || "".equals(realQuery)) {
|
|
realQuery = tmpQuery;
|
|
}
|
|
|
|
|
|
String collection_real ="";
|
|
String[] collections_real = null;
|
|
|
|
// 컬렉션 설정
|
|
if(collection.equals("ALL") || collection.equals("")){
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost","total","toon"}; //COLLECTIONS;
|
|
collections_real = new String[]{"info","map","number","pick","reference","story","culturePost","total","toon"};
|
|
collection_real = collection;
|
|
}
|
|
else if(collection.indexOf("_Coll") >= 0){
|
|
collection_real = collection.replace("_Coll", "");
|
|
if(collection.indexOf("culturePost") >= 0){
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost","culturePostHot","toon"};
|
|
collections_real = new String[]{"culturePost","culturePostHot"};
|
|
collection_real = "culturePost";
|
|
}else{
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost","toon"};
|
|
collections_real = new String[]{collection_real};
|
|
}
|
|
}
|
|
|
|
|
|
WNSearch wnsearch = new WNSearch(isDebug, false, collections, searchFields);
|
|
|
|
wnsearch.setSf1Vo(sf1Vo);
|
|
|
|
for (int i = 0; i < collections.length; i++) {
|
|
|
|
// PAGE_INFO 페이지
|
|
int tmpViewCnt =viewCount;
|
|
if(collections[i].equals("info")){
|
|
if(tmpViewCnt == 4){
|
|
tmpViewCnt = 6;
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+tmpViewCnt);
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * viewCount) +","+viewCount);
|
|
}
|
|
|
|
}
|
|
else if(collections[i].equals("total")){
|
|
tmpViewCnt=8;
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+tmpViewCnt);
|
|
}
|
|
else if(collections[i].equals("toon")){ //지역문화 툰 그리드형식으로 12건씩 출력
|
|
if(collection.equals("ALL")||collection.equals("")){ //collection ALL일 경우
|
|
tmpViewCnt = 6;
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+tmpViewCnt);
|
|
}else if(viewCount == 10){
|
|
tmpViewCnt = 12;
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+tmpViewCnt);
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+viewCount);
|
|
}
|
|
}
|
|
else{
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * viewCount) +","+viewCount);
|
|
}
|
|
|
|
// DATE_RANGE 날짜
|
|
if("".equals(query) && "".equals(realQuery)){
|
|
wnsearch.setCollectionInfoValue(collections[i], DATE_RANGE, "1970/01/01,2030/01/01,-");
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], DATE_RANGE, startDate.replaceAll("\\.","/") + "," + endDate.replaceAll("\\.","/") +",/");
|
|
}
|
|
|
|
// SORT_FIELD 정렬 필드
|
|
if(collections[i].equals("total")){
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, "READ_CNT/DESC,DATE/DESC,RANK/DESC" );
|
|
}else{
|
|
if((collections[i].equals("info") ||collections[i].equals("culturePost") )&& sortField.equals("READ_CNT/DESC") ){
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, "RANK/DESC" );
|
|
}else if (collections[i].equals("reference")){
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, "MAIN_IMG_EXIST/DESC,ORG_OPEN_EXIST/DESC," + sortField );
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, sortField );
|
|
}
|
|
}
|
|
|
|
//exquery 설정
|
|
if ( !collections[i].equals("map")){
|
|
if( !collections[i].equals("info") && !exquery.equals("") ){
|
|
wnsearch.setCollectionInfoValue(collections[i], EXQUERY_FIELD, exquery );
|
|
}else if( collections[i].equals("info") && (!exquery.equals("") || !exquery_info.equals(""))){
|
|
wnsearch.setCollectionInfoValue(collections[i], EXQUERY_FIELD, exquery + exquery_info );
|
|
}
|
|
}
|
|
|
|
//SearchField 값이 있으면 설정, 없으면 기본검색필드
|
|
if ( !(searchVO.getSearchField()).equals("") && (searchVO.getSearchField()).indexOf("ALL") == -1 ) wnsearch.setCollectionInfoValue(collections[i], SEARCH_FIELD, (searchVO.getSearchField()) );
|
|
|
|
//operation 설정
|
|
if ( !strOperation.equals("") ) {
|
|
wnsearch.setCollectionInfoValue(collections[i], FILTER_OPERATION, strOperation);
|
|
}
|
|
|
|
if(!"ALL".equals(collection)){
|
|
if("culturePost".equals(collections[i]) && "culturePost".equals(collection_real)) {
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "TAGS:1/SC,KEYWORDS:1/SC"); //
|
|
}else if ( "number".equals(collections[i]) && "number".equals(collection_real)){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN,SEARCH_THEME_CD:1/SN,SEARCH_THEME_CD:2/SN,SEARCH_CLASS:1/SN,SEARCH_CLASS:2/SN");
|
|
}else if ( "story".equals(collections[i]) && "story".equals(collection_real)){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_THEME_CD:1/SN,SEARCH_THEME_CD:2/SN,SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN"); //TAGS:1/SN,TAGS:1/SN
|
|
}else if ( "reference".equals(collections[i])&& "reference".equals(collection_real) ){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_CLASS:1/SN,SEARCH_CLASS:2/SN,SEARCH_CATEGORY:1/SN,SEARCH_CATEGORY:2/SN,SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN");
|
|
}else if ( "info".equals(collections[i])&& "info".equals(collection_real) ){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "CONTENT_TYPE_NAME:1/SN,SEARCH_AREA_COUNCIL_INFO:1/SN");
|
|
}else if ( "pick".equals(collections[i]) && "pick".equals(collection_real) ){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_CLASS:1/SN,SEARCH_CLASS:2/SN,SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN"); //TAGS:1/SN,TAGS:1/SN
|
|
}else if ( "toon".equals(collections[i])&& "toon".equals(collection_real) ){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "TAGS:1/SC");
|
|
}
|
|
}else if("ALL".equals(collection)){
|
|
if("total".equals(collections[i])) {
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "TAGS:1/SC");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
wnsearch.search(realQuery, isRealTimeKeyword, CONNECTION_CLOSE, useSuggestedQuery, sf1Vo.getSearchIp(), sf1Vo.getSearchPort());
|
|
|
|
searchVO.setRealQuery(realQuery);
|
|
|
|
// 결과 담기
|
|
SearchCollectionResult collResultList = new SearchCollectionResult();
|
|
|
|
// 디버그 메시지 출력
|
|
String debugMsg = wnsearch.printDebug() != null ? wnsearch.printDebug().trim() : "";
|
|
collResultList.setDebugStr(debugMsg);
|
|
if(isDebug){
|
|
System.out.println("\n\n\n\n\n\n\n/*****************debugMsg********************/"+debugMsg);
|
|
}
|
|
|
|
|
|
// 결과 arrList
|
|
ArrayList<SearchCollectionVO> collList = new ArrayList<SearchCollectionVO>();
|
|
for (int i = 0; i < collections.length; i++) {
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
int totalCount = wnsearch.getResultTotalCount(collections[i]);
|
|
int resultCount = wnsearch.getResultCount(collections[i]);
|
|
String collectionName = wnsearch.getCollectionInfoValue(collections[i], INDEX_NAME);
|
|
|
|
String resultField = wnsearch.getCollectionInfoValue(collections[i], RESULT_FIELD);
|
|
String[] resultFieldArr = resultField.split(",");
|
|
|
|
/** map 방식 1. */
|
|
ArrayList<Map<Object ,Object>> resultList = new ArrayList<Map<Object ,Object>>();
|
|
|
|
for(int j = 0 ; j < resultCount ; j++){
|
|
Map<Object ,Object> resultMap = new HashMap<Object,Object>();
|
|
for(int k = 0 ; k < resultFieldArr.length ; k ++){
|
|
String[] documentFields = WNUtils.split(resultFieldArr[k], "/");
|
|
resultMap.put(documentFields[0],wnsearch.getField(collections[i],documentFields[0] , j , false).replace("<!HS>", "").replace("<!HE>", "") );
|
|
}
|
|
resultList.add(j,resultMap);
|
|
}
|
|
|
|
colVo.setTotalCount(totalCount);
|
|
colVo.setResultCount(resultCount);
|
|
colVo.setCollectionName(collectionName);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(i,colVo);
|
|
|
|
}
|
|
|
|
|
|
int cateListCnt = collections.length ;
|
|
|
|
//자료유형 카테고리
|
|
if (collections_real.length == 1 && (collection_real.equals("pick") || collection_real.equals("number") || collection_real.equals("reference") )) {
|
|
String collection1 = collection_real;
|
|
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CLASS", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CLASS", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CLASS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CLASS", 1, j);
|
|
|
|
|
|
resultMap.put("first_class_nm", node);
|
|
resultMap.put("first_class_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
}
|
|
|
|
}
|
|
|
|
colVo.setCollectionName("first_class_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CLASS", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CLASS", 2, j);
|
|
|
|
|
|
resultMap.put("second_class_nm", node);
|
|
resultMap.put("second_class_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("second_class_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
//지역문화원
|
|
if (collections_real.length == 1 && (collection_real.equals("pick") || collection_real.equals("reference") || collection_real.equals("story"))) {
|
|
String collection1 = collection_real;
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 1, j);
|
|
|
|
resultMap.put("first_council_nm", node);
|
|
resultMap.put("first_council_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("first_council_cate");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 2, j);
|
|
|
|
resultMap.put("second_council_nm", node);
|
|
resultMap.put("second_council_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("second_council_cate");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (collections_real.length == 1 && collection_real.equals("number")) {
|
|
String collection1 = collection_real;
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL", 2);
|
|
|
|
//first
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
Map<String, Integer> first_resultMap = new HashMap<String, Integer>();
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 2 , j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 2, j);
|
|
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}
|
|
|
|
//first
|
|
String[] first_node = node.split("\\^");
|
|
if(first_resultMap.containsKey(first_node[0])){
|
|
nodeCnt = first_resultMap.get(first_node[0]) + nodeCnt;
|
|
}
|
|
first_resultMap.put(first_node[0],nodeCnt);
|
|
}
|
|
|
|
for (String key : first_resultMap.keySet()) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
|
|
resultMap.put("first_council_nm", key);
|
|
resultMap.put("first_council_cnt", first_resultMap.get(key));
|
|
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
|
|
}
|
|
|
|
colVo.setCollectionName("first_council_cate");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
//second
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 2, j);
|
|
|
|
//second
|
|
resultMap.put("second_council_nm", node);
|
|
resultMap.put("second_council_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("second_council_cate");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
}
|
|
|
|
|
|
//지역,유형
|
|
if (collections_real.length == 1 && collection_real.equals("info")) {
|
|
String collection1 = collection_real;
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL_INFO", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "CONTENT_TYPE_NAME", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL_INFO", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL_INFO", 1, j);
|
|
|
|
resultMap.put("first_council_nm", node);
|
|
resultMap.put("first_council_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("first_council_cate");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int nodeCnt_total = 0;
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"CONTENT_TYPE_NAME", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "CONTENT_TYPE_NAME", 1, j);
|
|
|
|
resultMap.put("second_council_nm", node);
|
|
resultMap.put("second_council_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("second_council_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//주제분야
|
|
if (collections_real.length == 1 && collection_real.equals("reference") ) {
|
|
String collection1 = collection_real;
|
|
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CATEGORY", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CATEGORY", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CATEGORY", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CATEGORY", 1, j);
|
|
|
|
|
|
resultMap.put("first_category_nm", node);
|
|
resultMap.put("first_category_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("first_category_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CATEGORY", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CATEGORY", 2, j);
|
|
|
|
|
|
resultMap.put("second_category_nm", node);
|
|
resultMap.put("second_category_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("second_category_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
//테마
|
|
if (collections_real.length == 1 && ( collection_real.equals("number") || collection_real.equals("story") )) {
|
|
String collection1 = collection_real;
|
|
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_THEME_CD", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_THEME_CD", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_THEME_CD", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_THEME_CD", 1, j);
|
|
|
|
resultMap.put("first_theme_cd", node);
|
|
resultMap.put("first_theme_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("first_theme_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_THEME_CD", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_THEME_CD", 2, j);
|
|
|
|
resultMap.put("second_theme_cd", node);
|
|
resultMap.put("second_theme_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("second_theme_cate");
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//지역문화포스트
|
|
if (collections_real.length == 2 && "culturePost".equals(collection_real) ) {
|
|
String collection1 = collection_real;
|
|
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "TAGS", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "KEYWORDS", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
//int j_result = 0;
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"TAGS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "TAGS", 1, j);
|
|
|
|
if (("null").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10 || ("^").equalsIgnoreCase(node)){
|
|
resultMap.put("tags_nm", node);
|
|
resultMap.put("tags_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("culturePostHot_tags");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"KEYWORDS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "KEYWORDS", 1, j);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10){
|
|
resultMap.put("keywords_nm", node);
|
|
resultMap.put("keywords_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("culturePostHot_keywords");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
}
|
|
|
|
//지역문화툰
|
|
if (collections_real.length == 1 && "toon".equals(collection_real) ) {
|
|
String collection1 = collection_real;
|
|
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "TAGS", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
//int j_result = 0;
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"TAGS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "TAGS", 1, j);
|
|
|
|
if (("null").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10 || ("^").equalsIgnoreCase(node)){
|
|
resultMap.put("tags_nm", node);
|
|
resultMap.put("tags_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("toon_tags");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
}
|
|
|
|
//통합검색 total 태그
|
|
if (collections_real.length != 1 && "ALL".equals(collection_real) ) {
|
|
String collection1 = "total";
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "TAGS", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"TAGS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "TAGS", 1, j);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10){
|
|
resultMap.put("tags_nm", node);
|
|
resultMap.put("tags_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("total_tags");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
collResultList.setCollectionList(collList);
|
|
|
|
// 연결 종료
|
|
if ( wnsearch != null ) {
|
|
wnsearch.closeServer();
|
|
}
|
|
return collResultList;
|
|
}catch(Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public String getSearchEtc(SearchVO searchVO ,Sf1VO sf1Vo) throws Exception {
|
|
StringBuffer receiverURL = new StringBuffer();
|
|
receiverURL.append("http://");
|
|
receiverURL.append(sf1Vo.getManagerIp()).append(":");
|
|
receiverURL.append(sf1Vo.getManagerPort());
|
|
receiverURL.append("/manage/Manager.do?");
|
|
receiverURL.append("xml="+URLEncoder.encode("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Request> <MGR> <Command>Monitoring</Command> <Data> <Job>Start Module</Job> <Server>cmanager1</Server> <Kind>Program</Kind> <Name>theme_k-static</Name> <Type>etc</Type> <SourceType>undefined</SourceType> <Srcid></Srcid> <Mode>undefined</Mode> <Args><![CDATA[]]></Args> </Data> </MGR></Request>", "UTF-8"));
|
|
|
|
String receiverURLStr = receiverURL.toString();
|
|
String ret = "";
|
|
|
|
try {
|
|
Thread.sleep(2000);
|
|
} catch (InterruptedException e) {
|
|
LOGGER.info("InterruptedException occurred");
|
|
}
|
|
|
|
if(getHtmls(receiverURLStr, sf1Vo.getSearchTimeOut())){
|
|
ret = "success";
|
|
}else{
|
|
ret = "fail";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
* 관리도구 자동완성 URL 호출해야 해당 결과 담기
|
|
* @param receiverURL 관리도구 URL 정보
|
|
* @param parameter 배치 정보 관련 파라미터값
|
|
* @param timeout 연결 시간 고정으로 3000
|
|
*/
|
|
private boolean getHtmls(String receiverURL, int timeout) {
|
|
boolean result = false;
|
|
HttpURLConnection uc = null;
|
|
int errorCode = 0;
|
|
try {
|
|
URL servletUrl = new URL(receiverURL);
|
|
uc = (HttpURLConnection) servletUrl.openConnection();
|
|
uc.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
|
|
uc.setRequestMethod("POST");
|
|
uc.setDoOutput(true);
|
|
uc.setDoInput(true);
|
|
uc.setUseCaches(false);
|
|
uc.setConnectTimeout(timeout);
|
|
uc.setReadTimeout(timeout);
|
|
uc.connect();
|
|
|
|
// -- Network error check
|
|
//System.out.println("[URLConnection Response Code] " + uc.getResponseCode());
|
|
if (uc.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
|
errorCode = uc.getResponseCode();
|
|
result = true;
|
|
} else {
|
|
errorCode = uc.getResponseCode();
|
|
result = false;
|
|
}
|
|
} catch(Exception ex) {
|
|
LOGGER.debug("[getHtmls() URL]["+receiverURL+"]");
|
|
LOGGER.debug("[getHtmls() error][errorCode:"+errorCode+"]["+ex+"]");
|
|
} finally {
|
|
uc.disconnect();
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 검색 결과 count */
|
|
@Override
|
|
public int getSearch_All_cnt(SearchVO searchVO, Sf1VO sf1Vo) throws Exception {
|
|
try{
|
|
boolean isDebug = true;
|
|
String[] collections = null;
|
|
String[] searchFields = null;
|
|
boolean isRealTimeKeyword = false;
|
|
boolean useSuggestedQuery = true;
|
|
isDebug = true; //디버그 설정
|
|
|
|
String exquery= "";
|
|
String strOperation ="";
|
|
|
|
|
|
/** 검색어 */
|
|
String query = searchVO.getQuery();
|
|
query = StringEscapeUtils.unescapeHtml4(query);
|
|
query = WNUtils.checkReqXSS(query, "");
|
|
searchVO.setQuery(query);
|
|
|
|
/** 결과내 검색어 */
|
|
String realQuery = searchVO.getRealQuery();
|
|
realQuery = StringEscapeUtils.unescapeHtml4(realQuery);
|
|
realQuery = WNUtils.checkReqXSS(realQuery, "");
|
|
|
|
String reQuery = searchVO.getReQuery();
|
|
reQuery = StringEscapeUtils.unescapeHtml4(reQuery);
|
|
reQuery = WNUtils.checkReqXSS(reQuery, "");
|
|
searchVO.setReQuery(reQuery);
|
|
|
|
/** 결과내 재검색 체크필드 */
|
|
String rt = searchVO.getRt();
|
|
rt = StringEscapeUtils.unescapeHtml4(rt);
|
|
|
|
if(!reQuery.equals("")){
|
|
rt = WNUtils.checkReqXSS(rt, "1");
|
|
}else{
|
|
rt = WNUtils.checkReqXSS(rt, "");
|
|
}
|
|
|
|
|
|
/** 정렬조건 */
|
|
String sortField = searchVO.getSortField();
|
|
sortField = WNUtils.checkReqXSS(sortField, "RANK/DESC");
|
|
searchVO.setSortField(sortField);
|
|
|
|
/* *//** 정렬 방식*//*
|
|
String sortOrder = searchVO.getSortOrder();
|
|
sortOrder = WNUtils.checkReqXSS(sortOrder, "DESC");*/
|
|
|
|
/** 검색 필드*/
|
|
String searchField = searchVO.getSearchField();
|
|
searchField = WNUtils.checkReqXSS(searchField, "ALL");
|
|
|
|
|
|
/** 검색 시작날짜 */
|
|
String startDate = searchVO.getStartDate();
|
|
startDate = WNUtils.checkReqXSS(startDate, "1970/01/01");
|
|
|
|
/** 검색 종료날짜*/
|
|
String endDate = searchVO.getEndDate();
|
|
endDate = WNUtils.checkReqXSS(endDate, WNUtils.getCurrentDate());
|
|
|
|
/** 컬렉션 이름*/
|
|
String collection = searchVO.getCollection();
|
|
if("".equals(collection)) searchVO.setCollection("ALL");
|
|
collection = WNUtils.checkReqXSS(collection, "ALL");
|
|
|
|
|
|
/** 시작위치 */
|
|
int startCount = searchVO.getStartCount();
|
|
if(startCount == 0 || collection.equals("ALL") || collection.equals("")){
|
|
startCount =1;
|
|
}
|
|
|
|
|
|
/** 출력갯수 */
|
|
int viewCount = searchVO.getViewCount();
|
|
if ( collection.equals("ALL") || collection.equals("") ||viewCount == 0){
|
|
viewCount = 4;
|
|
}
|
|
|
|
// searchVO.setViewCount(viewCount);
|
|
|
|
/** 디버그 YN*/
|
|
String debug = searchVO.getDebug();
|
|
debug = WNUtils.checkReqXSS(debug, "Y");
|
|
|
|
/** 검색 연산자**/
|
|
String operator = searchVO.getOperator();
|
|
operator = WNUtils.checkReqXSS(operator, "N");
|
|
String tmpQuery = query;
|
|
if("OR".equals(operator)){
|
|
tmpQuery = tmpQuery.replaceAll(" ", "|");
|
|
}
|
|
|
|
/*********************고급 검색*********************************/
|
|
//정확히 일치
|
|
String exactQuery = searchVO.getExactQuery();
|
|
exactQuery = StringEscapeUtils.unescapeHtml4(exactQuery);
|
|
exactQuery = WNUtils.checkReqXSS(exactQuery, "");
|
|
searchVO.setExactQuery(exactQuery);
|
|
if(!exactQuery.equals("")){
|
|
tmpQuery += "\"" + exactQuery + "\"";
|
|
}
|
|
|
|
//반드시 포함
|
|
String andQuery = searchVO.getAndQuery();
|
|
andQuery = StringEscapeUtils.unescapeHtml4(andQuery);
|
|
andQuery = WNUtils.checkReqXSS(andQuery, "");
|
|
searchVO.setAndQuery(andQuery);
|
|
if(!andQuery.equals("")){
|
|
tmpQuery += " " + andQuery +"" ;
|
|
}
|
|
|
|
//포함하지 않는
|
|
String notQuery = searchVO.getNotQuery();
|
|
notQuery = StringEscapeUtils.unescapeHtml4(notQuery);
|
|
notQuery = WNUtils.checkReqXSS(notQuery, "");
|
|
searchVO.setNotQuery(notQuery);
|
|
if(!notQuery.equals("")){
|
|
tmpQuery += "!" + notQuery +"";
|
|
}
|
|
|
|
|
|
/**********************상세 검색*********************************/
|
|
//상세검색 - 관리번호(입력)
|
|
String mgnt_no = searchVO.getMgnt_no();
|
|
mgnt_no = StringEscapeUtils.unescapeHtml4(mgnt_no);
|
|
mgnt_no = WNUtils.checkReqXSS(mgnt_no, "");
|
|
//searchVO.setMgnt_no(mgnt_no);
|
|
if ( !mgnt_no.equals("") ) {
|
|
exquery += "<MGNT_NO:contains:" + mgnt_no + "> ";
|
|
}
|
|
|
|
//상세검색 - 시대(선택)
|
|
String trs_age = searchVO.getTrs_age();
|
|
trs_age = StringEscapeUtils.unescapeHtml4(trs_age);
|
|
trs_age = WNUtils.checkReqXSS(trs_age, "");
|
|
trs_age = trs_age.replace(",","|");
|
|
if ( !trs_age.equals("") ) {
|
|
if(trs_age.indexOf("ALL") == -1){
|
|
exquery += "<TRS_AGE:contains:" + trs_age + "> ";
|
|
}
|
|
}
|
|
|
|
//상세검색 - 주제분야(선택)
|
|
String second_category = searchVO.getSecond_category();
|
|
second_category = StringEscapeUtils.unescapeHtml4(second_category);
|
|
second_category = WNUtils.checkReqXSS(second_category, "");
|
|
second_category = second_category.replace(",","|");
|
|
if ( !second_category.equals("") ) {
|
|
exquery += "<SECOND_CATEGORY:contains:" + second_category + "> ";
|
|
}
|
|
|
|
//상세검색 - 문화테마(선택)
|
|
String series_cd = searchVO.getSeries_cd();
|
|
series_cd = StringEscapeUtils.unescapeHtml4(series_cd);
|
|
series_cd = WNUtils.checkReqXSS(series_cd, "");
|
|
series_cd = series_cd.replace(",","|");
|
|
if ( !series_cd.equals("") ) {
|
|
exquery += "<SEARCH_THEME_CD:contains:" + series_cd + "> ";
|
|
}
|
|
|
|
|
|
//상세검색 - 자료유형(선택)
|
|
String second_class = searchVO.getSecond_class();
|
|
second_class = StringEscapeUtils.unescapeHtml4(second_class);
|
|
second_class = WNUtils.checkReqXSS(second_class, "");
|
|
second_class = second_class.replace(",","|");
|
|
if ( !second_class.equals("") ) {
|
|
exquery += "<SECOND_CLASS:contains:" + second_class + "> ";
|
|
}/*else if(second_class.equals("")){ //chk
|
|
searchVO.setFirst_class("");
|
|
}*/
|
|
|
|
|
|
|
|
//상세검색 - 지역/문화원(선택)
|
|
String sojang_council = searchVO.getSojang_council();
|
|
sojang_council = StringEscapeUtils.unescapeHtml4(sojang_council);
|
|
sojang_council = WNUtils.checkReqXSS(sojang_council, "");
|
|
sojang_council = sojang_council.replace(",","|");
|
|
if ( !sojang_council.equals("") && !sojang_council.equals("|")) {
|
|
exquery += "<SOJANG_COUNCIL:contains:" + sojang_council + "> ";
|
|
}/*else if(second_class.equals("")){ //chk
|
|
searchVO.setSido_name("");
|
|
}*/
|
|
|
|
|
|
//System.out.println("\n\n\n\n\n\n\n/*****************[totalCount-exquery]********************"+exquery);
|
|
|
|
|
|
//상세검색 - 발행년도(기간)
|
|
String genyear_start = searchVO.getGenyear_start();
|
|
genyear_start = WNUtils.checkReqXSS(genyear_start, "");
|
|
if( !genyear_start.equals("")) {
|
|
strOperation += "<GENYEAR:gte:" + genyear_start + "> ";
|
|
}
|
|
|
|
String genyear_end = searchVO.getGenyear_end();
|
|
genyear_end = WNUtils.checkReqXSS(genyear_end, "");
|
|
if( !genyear_end.equals("")) {
|
|
strOperation += "<GENYEAR:lte:" + genyear_end + ">";
|
|
}
|
|
|
|
//상세검색 - 연대(기간)
|
|
String chronological_start = searchVO.getChronological_start();
|
|
chronological_start = WNUtils.checkReqXSS(chronological_start, "");
|
|
if( !chronological_start.equals("")) {
|
|
strOperation += "<CHRONOLOGICAL_START:gte:" + chronological_start + "> ";
|
|
}
|
|
|
|
String chronological_end = searchVO.getChronological_end();
|
|
chronological_end = WNUtils.checkReqXSS(chronological_end, "");
|
|
if( !chronological_end.equals("")) {
|
|
strOperation += "<CHRONOLOGICAL_END:lte:" + chronological_end + ">";
|
|
}
|
|
|
|
|
|
|
|
//쿼리 설정
|
|
if (rt.equals("1")) {
|
|
realQuery = tmpQuery + " (" + reQuery+")"; //realQuery
|
|
} else if (!rt.equals("1") || "".equals(realQuery)) {
|
|
realQuery = tmpQuery;
|
|
}
|
|
|
|
|
|
// 컬렉션 설정
|
|
//if(collection.equals("ALL") || collection.equals("")){
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost", "toon"};
|
|
|
|
WNSearch wnsearch = new WNSearch(isDebug, false, collections, searchFields);
|
|
|
|
wnsearch.setSf1Vo(sf1Vo);
|
|
|
|
for (int i = 0; i < collections.length; i++) {
|
|
|
|
// PAGE_INFO 페이지
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * viewCount) +","+viewCount);
|
|
|
|
|
|
// DATE_RANGE 날짜
|
|
if("".equals(query) && "".equals(realQuery)){
|
|
wnsearch.setCollectionInfoValue(collections[i], DATE_RANGE, "1970/01/01,2030/01/01,-");
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], DATE_RANGE, startDate.replaceAll("\\.","/") + "," + endDate.replaceAll("\\.","/") +",/");
|
|
}
|
|
|
|
// SORT_FIELD 정렬 필드
|
|
/* if(collections[i].equals("total")){
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, "READ_CNT/DESC" );
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, sortField );
|
|
}
|
|
else{
|
|
if(sortField.equals("READ_CNT/DESC") && collections[i].equals("total") && collections[i].equals("total")){
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, sortField );
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, sortField );
|
|
}
|
|
}*/
|
|
|
|
|
|
//exquery 설정
|
|
if ( !exquery.equals("") ){
|
|
if(!collections[i].equals("map")){
|
|
wnsearch.setCollectionInfoValue(collections[i], EXQUERY_FIELD, exquery );
|
|
}
|
|
|
|
}
|
|
|
|
//SearchField 값이 있으면 설정, 없으면 기본검색필드
|
|
if ( !(searchVO.getSearchField()).equals("") && (searchVO.getSearchField()).indexOf("ALL") == -1 ) wnsearch.setCollectionInfoValue(collections[i], SEARCH_FIELD, (searchVO.getSearchField()) );
|
|
|
|
//operation 설정
|
|
if ( !strOperation.equals("") ) {
|
|
wnsearch.setCollectionInfoValue(collections[i], FILTER_OPERATION, strOperation);
|
|
}
|
|
|
|
}
|
|
|
|
wnsearch.search(realQuery, isRealTimeKeyword, CONNECTION_CLOSE, useSuggestedQuery, sf1Vo.getSearchIp(), sf1Vo.getSearchPort());
|
|
searchVO.setRealQuery(realQuery);
|
|
|
|
// 결과 담기
|
|
SearchCollectionResult collResultList = new SearchCollectionResult();
|
|
|
|
// 디버그 메시지 출력
|
|
String debugMsg = wnsearch.printDebug() != null ? wnsearch.printDebug().trim() : "";
|
|
collResultList.setDebugStr(debugMsg);
|
|
//System.out.println("\n\n\n\n\n\n\n/*****************[totalCount-debugMsg]********************/"+debugMsg);
|
|
|
|
int totalCount = 0 ;
|
|
|
|
// 결과 arrList
|
|
for (int i = 0; i < collections.length; i++) { // 컬렉션 for
|
|
|
|
totalCount += wnsearch.getResultTotalCount(collections[i]);
|
|
|
|
}
|
|
|
|
//System.out.println("\n\n\n\n\n\n\n/*****************[totalCount-totalCount]********************/"+totalCount);
|
|
|
|
|
|
// 연결 종료
|
|
if ( wnsearch != null ) {
|
|
wnsearch.closeServer();
|
|
}
|
|
return totalCount;
|
|
}catch(Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/** 검색 결과 받기 */
|
|
@Override
|
|
public SearchCollectionResult getSearch_ajax(SearchVO searchVO, Sf1VO sf1Vo) throws Exception {
|
|
try{
|
|
boolean isDebug = true;
|
|
String[] collections = null;
|
|
String[] searchFields = null;
|
|
boolean isRealTimeKeyword = false;
|
|
boolean useSuggestedQuery = true;
|
|
isDebug = true; //디버그 설정
|
|
|
|
String exquery= "";
|
|
String strOperation ="";
|
|
String exquery_info="";
|
|
|
|
|
|
/** 검색어 */
|
|
String query = searchVO.getQuery();
|
|
query = StringEscapeUtils.unescapeHtml4(query);
|
|
query = WNUtils.checkReqXSS(query, "");
|
|
searchVO.setQuery(query);
|
|
|
|
/** 결과내 검색어 */
|
|
String realQuery = searchVO.getRealQuery();
|
|
realQuery = StringEscapeUtils.unescapeHtml4(realQuery);
|
|
realQuery = WNUtils.checkReqXSS(realQuery, "");
|
|
|
|
String reQuery = searchVO.getReQuery();
|
|
reQuery = StringEscapeUtils.unescapeHtml4(reQuery);
|
|
reQuery = WNUtils.checkReqXSS(reQuery, "");
|
|
searchVO.setReQuery(reQuery);
|
|
|
|
/** 결과내 재검색 체크필드 */
|
|
String rt = searchVO.getRt();
|
|
rt = StringEscapeUtils.unescapeHtml4(rt);
|
|
|
|
if(!reQuery.equals("")){
|
|
rt = WNUtils.checkReqXSS(rt, "1");
|
|
}else{
|
|
rt = WNUtils.checkReqXSS(rt, "");
|
|
}
|
|
|
|
|
|
/** 정렬조건 */
|
|
String sortField = searchVO.getSortField();
|
|
sortField = WNUtils.checkReqXSS(sortField, "RANK/DESC");
|
|
searchVO.setSortField(sortField);
|
|
|
|
/** 검색 필드*/
|
|
String searchField = searchVO.getSearchField();
|
|
searchField = WNUtils.checkReqXSS(searchField, "ALL");
|
|
|
|
|
|
/** 검색 시작날짜 */
|
|
String startDate = searchVO.getStartDate();
|
|
startDate = WNUtils.checkReqXSS(startDate, "1970/01/01");
|
|
|
|
/** 검색 종료날짜*/
|
|
String endDate = searchVO.getEndDate();
|
|
endDate = WNUtils.checkReqXSS(endDate, WNUtils.getCurrentDate());
|
|
|
|
/** 컬렉션 이름*/
|
|
String collection = searchVO.getCollection();
|
|
if("".equals(collection)) searchVO.setCollection("ALL");
|
|
collection = WNUtils.checkReqXSS(collection, "ALL");
|
|
|
|
|
|
/** 시작위치 */
|
|
int startCount = searchVO.getStartCount();
|
|
if(startCount == 0 || collection.equals("ALL") || collection.equals("")){
|
|
startCount =1;
|
|
}
|
|
|
|
|
|
/** 출력갯수 */
|
|
int viewCount = searchVO.getViewCount();
|
|
if ( collection.equals("ALL") || collection.equals("") ||viewCount == 0){
|
|
viewCount = 4;
|
|
}
|
|
|
|
// searchVO.setViewCount(viewCount);
|
|
|
|
/** 디버그 YN*/
|
|
String debug = searchVO.getDebug();
|
|
debug = WNUtils.checkReqXSS(debug, "Y");
|
|
|
|
/** 검색 연산자**/
|
|
String operator = searchVO.getOperator();
|
|
operator = WNUtils.checkReqXSS(operator, "N");
|
|
String tmpQuery = query;
|
|
if("OR".equals(operator)){
|
|
tmpQuery = tmpQuery.replaceAll(" ", "|");
|
|
}
|
|
|
|
/*********************고급 검색*********************************/
|
|
//정확히 일치
|
|
String exactQuery = searchVO.getExactQuery();
|
|
exactQuery = StringEscapeUtils.unescapeHtml4(exactQuery);
|
|
exactQuery = WNUtils.checkReqXSS(exactQuery, "");
|
|
searchVO.setExactQuery(exactQuery);
|
|
if(!exactQuery.equals("")){
|
|
tmpQuery += "\"" + exactQuery + "\"";
|
|
}
|
|
|
|
//반드시 포함
|
|
String andQuery = searchVO.getAndQuery();
|
|
andQuery = StringEscapeUtils.unescapeHtml4(andQuery);
|
|
andQuery = WNUtils.checkReqXSS(andQuery, "");
|
|
searchVO.setAndQuery(andQuery);
|
|
if(!andQuery.equals("")){
|
|
tmpQuery += " " + andQuery +"" ;
|
|
}
|
|
|
|
//포함하지 않는
|
|
String notQuery = searchVO.getNotQuery();
|
|
notQuery = StringEscapeUtils.unescapeHtml4(notQuery);
|
|
notQuery = WNUtils.checkReqXSS(notQuery, "");
|
|
searchVO.setNotQuery(notQuery);
|
|
if(!notQuery.equals("")){
|
|
tmpQuery += "!" + notQuery +"";
|
|
}
|
|
|
|
|
|
/**********************상세 검색*********************************/
|
|
//상세검색 - 관리번호(입력)
|
|
String mgnt_no = searchVO.getMgnt_no();
|
|
mgnt_no = StringEscapeUtils.unescapeHtml4(mgnt_no);
|
|
mgnt_no = WNUtils.checkReqXSS(mgnt_no, "");
|
|
//searchVO.setMgnt_no(mgnt_no);
|
|
if ( !mgnt_no.equals("") ) {
|
|
exquery += "<MGNT_NO:contains:" + mgnt_no + "> ";
|
|
}
|
|
|
|
//상세검색 - 시대(선택)
|
|
String trs_age = searchVO.getTrs_age();
|
|
trs_age = StringEscapeUtils.unescapeHtml4(trs_age);
|
|
trs_age = WNUtils.checkReqXSS(trs_age, "");
|
|
trs_age = trs_age.replace(",","|");
|
|
if ( !trs_age.equals("") ) {
|
|
if(trs_age.indexOf("ALL") == -1){
|
|
exquery += "<TRS_AGE:contains:" + trs_age + "> ";
|
|
}
|
|
}
|
|
|
|
//상세검색 - 주제분야(선택)
|
|
String second_category = searchVO.getSecond_category();
|
|
second_category = StringEscapeUtils.unescapeHtml4(second_category);
|
|
second_category = WNUtils.checkReqXSS(second_category, "");
|
|
second_category = second_category.replace(",","|");
|
|
if ( !second_category.equals("") ) {
|
|
exquery += "<SECOND_CATEGORY:contains:" + second_category + "> ";
|
|
}
|
|
|
|
//상세검색 - 문화테마(선택)
|
|
String series_cd = searchVO.getSeries_cd();
|
|
series_cd = StringEscapeUtils.unescapeHtml4(series_cd);
|
|
series_cd = WNUtils.checkReqXSS(series_cd, "");
|
|
series_cd = series_cd.replace(",","|");
|
|
if ( !series_cd.equals("") ) {
|
|
exquery += "<SEARCH_THEME_CD:contains:" + series_cd + "> "; //역사문화유산^유교
|
|
}
|
|
|
|
|
|
//상세검색 - 자료유형(선택)
|
|
String second_class = searchVO.getSecond_class();
|
|
second_class = StringEscapeUtils.unescapeHtml4(second_class);
|
|
second_class = WNUtils.checkReqXSS(second_class, "");
|
|
second_class = second_class.replace(",","|");
|
|
if ( !second_class.equals("") ) {
|
|
exquery += "<SECOND_CLASS:contains:" + second_class + "> ";
|
|
}/*else if(second_class.equals("")){ //chk
|
|
searchVO.setFirst_class("");
|
|
}*/
|
|
|
|
//상세검색 - 지역/문화원(선택)
|
|
String sojang_council = searchVO.getSojang_council();
|
|
sojang_council = StringEscapeUtils.unescapeHtml4(sojang_council);
|
|
sojang_council = WNUtils.checkReqXSS(sojang_council, "");
|
|
sojang_council = sojang_council.replace(",","|");
|
|
if ( !sojang_council.equals("") && !sojang_council.equals("|")) {
|
|
exquery += "<SOJANG_COUNCIL:contains:" + sojang_council + "> ";
|
|
}
|
|
|
|
|
|
|
|
//상세검색 - 지역 (지역문화정보)
|
|
String search_area_council_info = searchVO.getSearch_area_council_info();
|
|
search_area_council_info = StringEscapeUtils.unescapeHtml4(search_area_council_info);
|
|
search_area_council_info = WNUtils.checkReqXSS(search_area_council_info, "");
|
|
search_area_council_info = search_area_council_info.replace(",","|");
|
|
if ( !search_area_council_info.equals("") && !search_area_council_info.equals("|")) {
|
|
exquery_info+= "<SEARCH_AREA_COUNCIL_INFO:contains:" + search_area_council_info + "> ";
|
|
}
|
|
|
|
//상세검색 - 유형 (지역문화정보)
|
|
String content_type = searchVO.getContent_type();
|
|
content_type = StringEscapeUtils.unescapeHtml4(content_type);
|
|
content_type = WNUtils.checkReqXSS(content_type, "");
|
|
content_type = content_type.replace(",","|");
|
|
if ( !content_type.equals("") && !content_type.equals("|")) {
|
|
exquery_info += "<CONTENT_TYPE_NAME:contains:" + content_type + "> ";
|
|
}
|
|
|
|
System.out.println("\n\n\n\n\n\n\n/*****************exquery********************"+exquery + exquery_info);
|
|
|
|
|
|
|
|
//상세검색 - 발행년도(기간)
|
|
String genyear_start = searchVO.getGenyear_start();
|
|
genyear_start = WNUtils.checkReqXSS(genyear_start, "");
|
|
if( !genyear_start.equals("")) {
|
|
strOperation += "<GENYEAR:gte:" + genyear_start + "> ";
|
|
}
|
|
|
|
String genyear_end = searchVO.getGenyear_end();
|
|
genyear_end = WNUtils.checkReqXSS(genyear_end, "");
|
|
if( !genyear_end.equals("")) {
|
|
strOperation += "<GENYEAR:lte:" + genyear_end + ">";
|
|
}
|
|
|
|
//상세검색 - 연대(기간)
|
|
String chronological_start = searchVO.getChronological_start();
|
|
chronological_start = WNUtils.checkReqXSS(chronological_start, "");
|
|
if( !chronological_start.equals("")) {
|
|
strOperation += "<CHRONOLOGICAL_START:gte:" + chronological_start + "> ";
|
|
}
|
|
|
|
String chronological_end = searchVO.getChronological_end();
|
|
chronological_end = WNUtils.checkReqXSS(chronological_end, "");
|
|
if( !chronological_end.equals("")) {
|
|
strOperation += "<CHRONOLOGICAL_END:lte:" + chronological_end + ">";
|
|
}
|
|
|
|
/** 상세검색 컬렉션 체크박스*/
|
|
//String chkColls = searchVO.getChkColls();
|
|
//chkColls = WNUtils.checkReqXSS(chkColls, "");
|
|
|
|
|
|
|
|
//쿼리 설정
|
|
if (rt.equals("1")) {
|
|
realQuery = tmpQuery + " (" + reQuery+")"; //realQuery
|
|
} else if (!rt.equals("1") || "".equals(realQuery)) {
|
|
realQuery = tmpQuery;
|
|
}
|
|
//System.out.println("\n\n\n\n\n\n\n/*****************tmpQuery********************/"+tmpQuery);
|
|
|
|
String collection_real ="";
|
|
String[] collections_real = null;
|
|
|
|
// 컬렉션 설정
|
|
/*if(collection.indexOf("_Coll") >= 0){
|
|
collection_real = collection.replace("_Coll", "");
|
|
if(collection.indexOf("culturePost") >= 0){
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost","culturePostHot"};
|
|
collections_real = new String[]{"culturePost","culturePostHot"};
|
|
collection_real = "culturePost";
|
|
}else{
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost"};
|
|
collections_real = new String[]{collection_real};
|
|
}
|
|
}
|
|
*/
|
|
|
|
if(collection.equals("ALL") || collection.equals("")){
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost","total"};//COLLECTIONS;
|
|
collections_real = new String[]{"info","map","number","pick","reference","story","culturePost","total"};
|
|
collection_real = collection;
|
|
}
|
|
else if(collection.indexOf("_Coll") >= 0){
|
|
collection_real = collection.replace("_Coll", "");
|
|
if(collection.indexOf("culturePost") >= 0){
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost","culturePostHot"};
|
|
collections_real = new String[]{"culturePost","culturePostHot"};
|
|
collection_real = "culturePost";
|
|
}else{
|
|
collections = new String[]{"info","map","number","pick","reference","story","culturePost"};
|
|
collections_real = new String[]{collection_real};
|
|
}
|
|
}
|
|
|
|
System.out.println("\n\n\n\n#################################[collection_real]: "+collection_real);
|
|
|
|
WNSearch wnsearch = new WNSearch(isDebug, false, collections, searchFields);
|
|
|
|
wnsearch.setSf1Vo(sf1Vo);
|
|
|
|
for (int i = 0; i < collections.length; i++) {
|
|
// PAGE_INFO 페이지
|
|
int tmpViewCnt =viewCount;
|
|
if(collections[i].equals("info")){
|
|
if(tmpViewCnt == 4){
|
|
tmpViewCnt = 6;
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+tmpViewCnt);
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * viewCount) +","+viewCount);
|
|
}
|
|
|
|
}
|
|
else if(collections[i].equals("total")){
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * tmpViewCnt) +","+8);
|
|
}
|
|
else{
|
|
wnsearch.setCollectionInfoValue(collections[i], PAGE_INFO, ((startCount - 1 ) * viewCount) +","+viewCount);
|
|
}
|
|
|
|
// DATE_RANGE 날짜
|
|
if("".equals(query) && "".equals(realQuery)){
|
|
wnsearch.setCollectionInfoValue(collections[i], DATE_RANGE, "1970/01/01,2030/01/01,-");
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], DATE_RANGE, startDate.replaceAll("\\.","/") + "," + endDate.replaceAll("\\.","/") +",/");
|
|
}
|
|
|
|
// SORT_FIELD 정렬 필드
|
|
if(collections[i].equals("total")){
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, "READ_CNT/DESC,DATE/DESC,RANK/DESC" );
|
|
}else{
|
|
wnsearch.setCollectionInfoValue(collections[i], SORT_FIELD, sortField );
|
|
}
|
|
|
|
|
|
//exquery 설정
|
|
if ( !collections[i].equals("map")){
|
|
if( !collections[i].equals("info") && !exquery.equals("") ){
|
|
wnsearch.setCollectionInfoValue(collections[i], EXQUERY_FIELD, exquery );
|
|
}else if( collections[i].equals("info") && (!exquery.equals("") || !exquery_info.equals(""))){
|
|
wnsearch.setCollectionInfoValue(collections[i], EXQUERY_FIELD, exquery + exquery_info );
|
|
}
|
|
}
|
|
|
|
//SearchField 값이 있으면 설정, 없으면 기본검색필드
|
|
if ( !(searchVO.getSearchField()).equals("") && (searchVO.getSearchField()).indexOf("ALL") == -1 ) wnsearch.setCollectionInfoValue(collections[i], SEARCH_FIELD, (searchVO.getSearchField()) );
|
|
|
|
//operation 설정
|
|
if ( !strOperation.equals("") ) {
|
|
wnsearch.setCollectionInfoValue(collections[i], FILTER_OPERATION, strOperation);
|
|
}
|
|
|
|
|
|
if(!"ALL".equals(collection)){
|
|
if("culturePost".equals(collections[i]) && "culturePost".equals(collection_real)) {
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "TAGS:1/SC,KEYWORDS:1/SC"); //
|
|
}else if ( "number".equals(collections[i]) && "number".equals(collection_real)){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN,SEARCH_THEME_CD:1/SN,SEARCH_THEME_CD:2/SN,SEARCH_CLASS:1/SN,SEARCH_CLASS:2/SN");
|
|
}else if ( "story".equals(collections[i]) && "story".equals(collection_real)){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_THEME_CD:1/SN,SEARCH_THEME_CD:2/SN,SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN"); //TAGS:1/SN,TAGS:1/SN
|
|
}else if ( "reference".equals(collections[i])&& "reference".equals(collection_real) ){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_CLASS:1/SN,SEARCH_CLASS:2/SN,SEARCH_CATEGORY:1/SN,SEARCH_CATEGORY:2/SN,SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN");
|
|
}else if ( "info".equals(collections[i])&& "info".equals(collection_real) ){
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "CONTENT_TYPE_NAME:1/SN,SEARCH_AREA_COUNCIL_INFO:1/SN");
|
|
}else if ( "pick".equals(collections[i]) && "pick".equals(collection_real) ){
|
|
System.out.println(collections[i]+"########################pick:" + ( "pick".equals(collections[i]) && "pick".equals(collection_real) ));
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "SEARCH_CLASS:1/SN,SEARCH_CLASS:2/SN,SEARCH_AREA_COUNCIL:1/SN,SEARCH_AREA_COUNCIL:2/SN"); //TAGS:1/SN,TAGS:1/SN
|
|
}else if("toon".equals(collections[i]) && "toon".equals(collection_real)) {
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "TAGS:1/SC"); //
|
|
}
|
|
}else if("ALL".equals(collection)){
|
|
if("total".equals(collections[i])) {
|
|
wnsearch.setCollectionInfoValue(collections[i], CATEGORY_GROUPBY, "TAGS:1/SC");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
wnsearch.search(realQuery, isRealTimeKeyword, CONNECTION_CLOSE, useSuggestedQuery, sf1Vo.getSearchIp(), sf1Vo.getSearchPort());
|
|
|
|
searchVO.setRealQuery(realQuery);
|
|
|
|
// 결과 담기
|
|
SearchCollectionResult collResultList = new SearchCollectionResult();
|
|
|
|
// 디버그 메시지 출력
|
|
String debugMsg = wnsearch.printDebug() != null ? wnsearch.printDebug().trim() : "";
|
|
collResultList.setDebugStr(debugMsg);
|
|
if(isDebug){
|
|
System.out.println("\n\n\n\n\n\n\n/*****************debugMsg********************/"+debugMsg);
|
|
}
|
|
|
|
|
|
// 결과 arrList
|
|
ArrayList<SearchCollectionVO> collList = new ArrayList<SearchCollectionVO>();
|
|
for (int i = 0; i < collections.length; i++) { // 컬렉션 for
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
int totalCount = wnsearch.getResultTotalCount(collections[i]);
|
|
int resultCount = wnsearch.getResultCount(collections[i]);
|
|
//String collectionNameKr = wnsearch.getCollectionFieldValue(collections[i], WNCollection.COLLECTION_KOR); 안써
|
|
String collectionName = wnsearch.getCollectionInfoValue(collections[i], INDEX_NAME);
|
|
|
|
String resultField = wnsearch.getCollectionInfoValue(collections[i], RESULT_FIELD); //DOCID,DATE
|
|
String[] resultFieldArr = resultField.split(",");
|
|
|
|
/** map 방식 1. */
|
|
ArrayList<Map<Object ,Object>> resultList = new ArrayList<Map<Object ,Object>>();
|
|
|
|
for(int j = 0 ; j < resultCount ; j++){ // 검색 결과 for
|
|
Map<Object ,Object> resultMap = new HashMap<Object,Object>();
|
|
for(int k = 0 ; k < resultFieldArr.length ; k ++){ // 반환필드 결과 for
|
|
String[] documentFields = WNUtils.split(resultFieldArr[k], "/");
|
|
//resultMap.put(documentFields[0],wnsearch.getField(collections[i],documentFields[0] , j , false));
|
|
resultMap.put(documentFields[0],wnsearch.getField(collections[i],documentFields[0] , j , false).replace("<!HS>", "").replace("<!HE>", "") );
|
|
}
|
|
resultList.add(j,resultMap);
|
|
}
|
|
|
|
colVo.setTotalCount(totalCount); //info total
|
|
colVo.setResultCount(resultCount);
|
|
colVo.setCollectionName(collectionName); //info
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(i,colVo);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// int cateListCnt = collections.length ;
|
|
//int cateListCnt = collections_real.length ;
|
|
int cateListCnt = collections.length ;
|
|
|
|
//자료유형 카테고리
|
|
if (collections_real.length == 1 && (collection_real.equals("pick") || collection_real.equals("number") || collection_real.equals("reference") )) {
|
|
String collection1 = collection_real;
|
|
/** map 방식 1. */
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CLASS", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CLASS", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CLASS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CLASS", 1, j);
|
|
|
|
|
|
resultMap.put("first_class_nm", node);
|
|
resultMap.put("first_class_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
}
|
|
|
|
//resultList.add(j, resultMap);
|
|
//resultList.add(j_result, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("first_class_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CLASS", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CLASS", 2, j);
|
|
|
|
|
|
resultMap.put("second_class_nm", node);
|
|
resultMap.put("second_class_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
//System.out.println("node:" + node + "/cnt:" + nodeCnt);
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("second_class_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
//지역문화원
|
|
if (collections_real.length == 1 && (collection_real.equals("pick") || collection_real.equals("reference") || collection_real.equals("story"))) {
|
|
String collection1 = collection_real;
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 1, j);
|
|
//System.out.println("node:" + node + "/cnt:" + nodeCnt);
|
|
|
|
resultMap.put("first_council_nm", node);
|
|
resultMap.put("first_council_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("first_council_cate"); // info
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 2, j);
|
|
|
|
resultMap.put("second_council_nm", node);
|
|
resultMap.put("second_council_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("second_council_cate"); // info
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
if (collections_real.length == 1 && collection_real.equals("number")) {
|
|
String collection1 = collection_real;
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL", 2);
|
|
|
|
//first
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
Map<String, Integer> first_resultMap = new HashMap<String, Integer>();
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) {
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 2 , j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 2, j);
|
|
//System.out.println("node:" + node + "/cnt:" + nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}
|
|
|
|
//first
|
|
String[] first_node = node.split("\\^");
|
|
if(first_resultMap.containsKey(first_node[0])){
|
|
nodeCnt = first_resultMap.get(first_node[0]) + nodeCnt;
|
|
}
|
|
first_resultMap.put(first_node[0],nodeCnt);
|
|
}
|
|
|
|
for (String key : first_resultMap.keySet()) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
|
|
resultMap.put("first_council_nm", key);
|
|
resultMap.put("first_council_cnt", first_resultMap.get(key));
|
|
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("first_council_cate");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
//second
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL", 2, j);
|
|
|
|
//second
|
|
resultMap.put("second_council_nm", node);
|
|
resultMap.put("second_council_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("second_council_cate"); // info
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
}
|
|
|
|
|
|
//지역,유형
|
|
if (collections_real.length == 1 && collection_real.equals("info")) {
|
|
String collection1 = collection_real;
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_AREA_COUNCIL_INFO", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "CONTENT_TYPE_NAME", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_AREA_COUNCIL_INFO", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_AREA_COUNCIL_INFO", 1, j);
|
|
|
|
resultMap.put("first_council_nm", node);
|
|
resultMap.put("first_council_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("first_council_cate"); // info
|
|
//colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int nodeCnt_total = 0;
|
|
|
|
int j_result = 0;
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"CONTENT_TYPE_NAME", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "CONTENT_TYPE_NAME", 1, j);
|
|
|
|
resultMap.put("second_council_nm", node);
|
|
resultMap.put("second_council_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("second_council_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//주제분야
|
|
if (collections_real.length == 1 && collection_real.equals("reference") ) {
|
|
String collection1 = collection_real;
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CATEGORY", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_CATEGORY", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CATEGORY", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CATEGORY", 1, j);
|
|
|
|
|
|
resultMap.put("first_category_nm", node);
|
|
resultMap.put("first_category_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
System.out.println("node:" + node + "/cnt:" + nodeCnt);
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("first_category_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_CATEGORY", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_CATEGORY", 2, j);
|
|
|
|
|
|
resultMap.put("second_category_nm", node);
|
|
resultMap.put("second_category_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("second_category_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
//테마
|
|
if (collections_real.length == 1 && ( collection_real.equals("number") || collection_real.equals("story") )) {
|
|
String collection1 = collection_real;
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_THEME_CD", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "SEARCH_THEME_CD", 2);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_THEME_CD", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_THEME_CD", 1, j);
|
|
|
|
resultMap.put("first_theme_cd", node);
|
|
resultMap.put("first_theme_cnt", nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("first_theme_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int j_result = 0;
|
|
int nodeCnt_total = 0;
|
|
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"SEARCH_THEME_CD", 2, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "SEARCH_THEME_CD", 2, j);
|
|
|
|
resultMap.put("second_theme_cd", node);
|
|
resultMap.put("second_theme_cnt", nodeCnt);
|
|
|
|
if (("null^null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else{
|
|
resultList.add(j_result, resultMap);
|
|
j_result +=1;
|
|
nodeCnt_total += nodeCnt;
|
|
|
|
}
|
|
//resultList.add(j, resultMap);
|
|
}
|
|
|
|
colVo.setCollectionName("second_theme_cate"); // info
|
|
colVo.setTotalCount(nodeCnt_total);
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//지역문화포스트
|
|
if (collections_real.length == 2 && "culturePost".equals(collection_real) ) {
|
|
String collection1 = collection_real;
|
|
|
|
/** map 방식 1. */
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "TAGS", 1);
|
|
int second_class_cnt= wnsearch.getCategoryCount(collection1, "KEYWORDS", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
//int j_result = 0;
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"TAGS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "TAGS", 1, j);
|
|
//System.out.println("node:" + node + "/cnt:" + nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10 || ("^").equalsIgnoreCase(node)){
|
|
resultMap.put("tags_nm", node);
|
|
resultMap.put("tags_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("culturePostHot_tags");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
if(second_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < second_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"KEYWORDS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "KEYWORDS", 1, j);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10){
|
|
resultMap.put("keywords_nm", node);
|
|
resultMap.put("keywords_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("culturePostHot_keywords");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt+=1;
|
|
}
|
|
}
|
|
|
|
//지역문화툰
|
|
if (collections_real.length == 1 && "toon".equals(collection_real) ) {
|
|
String collection1 = collection_real;
|
|
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "TAGS", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
//int j_result = 0;
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) {
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"TAGS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "TAGS", 1, j);
|
|
|
|
if (("null").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10 || ("^").equalsIgnoreCase(node)){
|
|
resultMap.put("tags_nm", node);
|
|
resultMap.put("tags_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("toon_tags");
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
|
|
}
|
|
|
|
//통합검색 total 태그
|
|
if (collections_real.length != 1 && "ALL".equals(collection_real) ) {
|
|
String collection1 = "total";
|
|
int first_class_cnt= wnsearch.getCategoryCount(collection1, "TAGS", 1);
|
|
|
|
if(first_class_cnt > 0){
|
|
ArrayList<Map<Object, Object>> resultList = new ArrayList<Map<Object, Object>>();
|
|
SearchCollectionVO colVo = new SearchCollectionVO();
|
|
|
|
int cateCnt = 0;
|
|
for (int j = 0; j < first_class_cnt; j++) { // 검색 결과
|
|
Map<Object, Object> resultMap = new HashMap<Object, Object>();
|
|
String node = wnsearch.getCategoryName(collection1,"TAGS", 1, j);
|
|
int nodeCnt = wnsearch.getDocumentCountInCategory(collection1, "TAGS", 1, j);
|
|
//System.out.println("node:" + node + "/cnt:" + nodeCnt);
|
|
|
|
if (("null").equalsIgnoreCase(node) || ("^").equalsIgnoreCase(node)) {
|
|
continue;
|
|
}else if(cateCnt < 10){
|
|
resultMap.put("tags_nm", node);
|
|
resultMap.put("tags_cnt", nodeCnt);
|
|
|
|
resultList.add(cateCnt, resultMap);
|
|
cateCnt ++;
|
|
}
|
|
}
|
|
|
|
colVo.setCollectionName("total_tags"); // info
|
|
colVo.setSearchResultList(resultList);
|
|
collList.add(cateListCnt, colVo);
|
|
|
|
cateListCnt +=1;
|
|
}
|
|
}
|
|
|
|
|
|
collResultList.setCollectionList(collList);
|
|
|
|
// 연결 종료
|
|
if ( wnsearch != null ) {
|
|
wnsearch.closeServer();
|
|
}
|
|
return collResultList;
|
|
}catch(Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|