AWS CloudSearch



Java SDK 연동하는 CloudSearch 관련 문서가 없는거 같다. 


1. Document Update(JSON)


- Domain

@Setter
@Getter
@ToString
public class SearchDocument {
private String id;
private String type;
private SearchItem fields;
}


@Setter
@Getter
@ToString
public class SearchItem {
String id;
private String name;
String description;
String price;
String thumbnail;
Long fileSize;
String fileExtensions;
String creatorName;
String creatorEmail;
SearchItemKind kind;
String happenedDate;
String[] categoryNames;
Long[] categoryCodes;
}



- 위 Domain 을 JSON 으로 변환한 것

각 Object 최상위에 id 와 type, fields 는 필수로 존재해야 한다.

type 값에는 add, delete 두가지가 있다.

각 field type 에 허용되는 값에 대한 설명은 아래

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-index-fields.html

[
{
"id": "Marketplace_292",
"type": "add",
"fields": {
"id": "292",
"name": "Motion Graphics",
"description": "Motion Graphics description",
"price": "6.12",
"thumbnail": "http://**********/edbeb3e0-7c8c-4319-849b-863087f272c8.jpg",
"file_size": 21798,
"file_extensions": "jpg,png",
"creator_name": "hello",
"creator_email": "hello@hello.com",
"kind": "Marketplace",
"happened_date":"2016-03-26T05:12:32.545Z",
"category_names": [
"Video Motion",
"Motion Graphics",
"Overlays"
],
"category_codes": [
30,
210,
1775
]
}
}
]



Java Code


AmazonCloudSearchDomainClient domain
= new AmazonCloudSearchDomainClient(S3Manager.getCredentials());
domain.setEndpoint("********");

Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();

String str = gson.toJson(getSearchDocuments());

byte[] bytes = str.getBytes("UTF-8");

InputStream is = new ByteArrayInputStream(bytes);

UploadDocumentsRequest req = new UploadDocumentsRequest();
req.setContentType(ContentType.Applicationjson);
req.setDocuments(is);
req.setContentLength(0L + bytes.length);

UploadDocumentsResult result = domain.uploadDocuments(req);




'AWS > CloudSearch' 카테고리의 다른 글

[CloudSearch] Java SDK 사용하여 Search 하기  (0) 2016.03.29
[CloudSearch] Java SDK 로 document update  (0) 2016.03.28
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST




NodeJS - express 프레임웍에서 템플릿 엔진(EJS)을 이용하여 View 페이지로 JSON 객체를 넘겨줄 때, 


값이 제대로 넘어 가지 않고, 


스크립트 에러가 나거나, 값이 [Object, Object] 형식으로 제대로 나오지 않는 경우가 있다.


스크립트 에러는 "Uncaught SyntaxError: Unexpected identifier" 이런식으로 나고, 


"[object Object],[object Object],[object Object],[object Object],[object Object]," 이런식으로 JSON이 제대로


전달 되지 않는다.


JSON 객체는 보통 스트링 넘기듯이 넘기면 안된다.




NodeJS - Server Page


res.render('search/bbsList',{ result: JSON.stringify(result)

, caller:req.body.caller});


DB나 어떤 JSON 객체를  넘겨줄 때는 저런식으로 JSON.stringify 로 넘겨주어야한다.




NodeJS - View Page(EJS)


템플릿 엔진 옵션은 

open: '#{',

   close: '}'


보통 값을 불러올때는 #{= xxx} 이런식으로 불러오지만


json객체를 저런식으로 부르면 


{"lastname": " 


위와같은 값이 나오게 된다.


JSON 객체를 불러올 때는 


var resultList = #{-result};


이렇게 '=' 이 아닌 '-' 로 호출해야한다. 끝.


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. ㅜㅜ; 2012.10.28 17:11 신고  댓글주소  수정/삭제  댓글쓰기

    어제부터 json을 봐도 뭐가뭔지 짐작이안오네여 ㅠㅠ;; 혹시 node.js json에대한 소스예제는 없나요?

  2. 오호 2016.03.31 17:01 신고  댓글주소  수정/삭제  댓글쓰기

    도움이 많이 되었습니다! 근데 역으로 express 프레임웍에서 템플릿 엔진(EJS)을 이용하여 서버페이지에 json object를 넘겨줄땐 어찌 해야 할까요??



Json 데이터타입으로 jqGrid 를 만들어 보자.  - 초보용(저도 잘몰라요 ㅠㅠ)


필수 데이터 [

String page : 현재 페이지

String total : rows에 의한 총 페이지수

String records : 보여지는 데이터 개수


List rows [

{

String id : jqGrid 내부적으로 쓰이는 id값

List cell : 각 row 에 들어가는 column의 개수와 순서에 맞게 배열

},

{

String id : jqGrid 내부적으로 쓰이는 id값

List cell : 각 row 에 들어가는 column의 개수와 순서에 맞게 배열

},

...............................

]

]


위 데이터들은 컨트롤러에서 필수적으로 만들어져야한다.




뷰페이지


jQuery('#list1').jqGrid({

url:"/jqgrid.do"

,datatype:"json"

,loadError:function(){alert("Error~!!");}

,colNames:['번호', '이름', '등록 날짜', '제 목', '조회수', '댓글', '게시글번호']

,colModel:[

          {name:"id", index:'id', width:60, align:'center'}

          ,{name:"registerId", index:'registerId', width:60, align:'center'}

          ,{name:"registDatetime", index:'registDatetime', width:60, align:'center'}

          ,{name:"postTitle", index:'postTitle', width:400, align:'center'}

          ,{name:"readCnt", index:'readCnt', width:60, align:'center'}

          ,{name:"replyCnt", index:'replyCnt', width:60, align:'center'}

          ,{name:"postNo", index:'postNo', width:60, align:'center'}

          ]

,rowNum:10

,autowidth: false

,rowList:[10,20,30]

,pager: jQuery('#nav')

,sortname: 'id'

,viewrecords: true

,sortorder:'desc'

,width: 760

,height: '100%'

,onSelectRow: function(id){

alert(id);

}

,hidegrid: false

,caption: '마고 그리드'

});

<table id="list1"></table>

<div id="nav"></div>

---------------------------------------------------------------------------------------------

호출할 때 jqGrid 가 알아서, page 와 rows의 값을 던지나 보다. 

컨트롤러에서 꺼내면 첫 호출때는 page=1, rows= 저기위에 rownum 에 준 값


pager는 페이지네비게이션을 자동으로 만들어준다.







데이터 

MargoList returnList = new MargoList();
		List> dbList = null;
					
		try {
			dbList = bbsService.getBbsList(map);
		} catch (ServiceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		int listSize = dbList.size();
				
		if(listSize > 0){
			
			int page = Integer.parseInt(request.getParameter("page"));
			int rows = Integer.parseInt(request.getParameter("rows"));
			
			long totalRow = Long.parseLong(dbList.get(0).get("total"));
			double totalPage;
			
			if(totalRow > 0){
				totalPage = Math.ceil(totalRow/rows) + 1;
			}else{
				totalPage = 0;
			}
			
			returnList.setTotal(totalPage + "");
			returnList.setPage(page + "");		
			returnList.setRecords(dbList.size() + "");
			
			List setMargoCell = new ArrayList();
			
			for(int i = 0; i < listSize; i++){
				
				map = dbList.get(i);
				
				List cellList = new ArrayList();
				
				MargoCell cell = new MargoCell();
				
				cell.setId((i+1)+"");
				
				cellList.add((i+1)+"");
				cellList.add(map.get("registerId"));
				cellList.add(map.get("registDatetime"));
				cellList.add(map.get("postTitle"));
				cellList.add(map.get("readCnt"));
				cellList.add(map.get("replyCnt"));
				cellList.add(map.get("postNo"));
				cellList.add(map.get("deleteStatus"));
				
				cell.setCell(cellList);
				setMargoCell.add(cell);
			}
			returnList.setRows(setMargoCell);
		}
		return returnList;




YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 오세욱 2015.03.25 15:01 신고  댓글주소  수정/삭제  댓글쓰기

    이거 소스좀 받을수 있을까요?

  2. 1 2016.07.22 09:27 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 이거 혹시 소스 보내주실수 있으신지요(yp.cho@halla.com