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;
	}
}


