BLOG ARTICLE cloudsearch | 2 ARTICLE FOUND

  1. 2016.03.29 [CloudSearch] Java SDK 사용하여 Search 하기
  2. 2016.03.28 [CloudSearch] Java SDK 로 document update


AWS CloudSearch


AWS 관련자료가 원래 잘 없지만 CloudSearch 에 대한 자료는 더 없고

Java SDK 를 사용한 자료는 더 없다. 


간단하게 검색하는 방법입니다.


Document 를 업데이트하는건 전편에 설명



Java


AmazonCloudSearchDomainClient domain = new AmazonCloudSearchDomainClient(getCredentials());
domain.setEndpoint("search-**************.cloudsearch.amazonaws.com");

SearchRequest request = new SearchRequest();

long pageSize = 20;
long startIndex = 0 * pageSize; // 기본 0

String sort = "_score desc,id desc";

String filterQuery = "kind:'hello'";
String returnFields = "_all_fields,_score";
String queryOptions = "{ \n" +
" \"defaultOperator\":\"or\",\n" +
" \"fields\":[ \n" +
" \"name^5\",\n" +
" \"description^3\",\n" +
" \"tags^3\",\n" +
" \"colors^3\",\n" +
" \"category_names^3\",\n" +
" \"file_extensions^2\",\n" +
" \"creator_name\"\n" +
" ],\n" +
" \"operators\":[ \n" +
" \"and\",\n" +
" \"escape\",\n" +
" \"fuzzy\",\n" +
" \"near\",\n" +
" \"not\",\n" +
" \"or\",\n" +
" \"phrase\",\n" +
" \"precedence\",\n" +
" \"prefix\",\n" +
" \"whitespace\"\n" +
" ]\n" +
"}";

request.withQueryParser(QueryParser.Simple)
.withQuery(keyword)
.withStart(startIndex)
.withSize(pageSize)
.withSort(sort)
.withFilterQuery(filterQuery)
.withReturn(returnFields)
.withQueryOptions(queryOptions)
;

SearchResult searchResult = domain.search(request);

queryOptions 의 fields 는 검색대상들이며

name^5 라고 된것이 있는데

field에 weight 를 주고 _score 를 높여 더 높은 검색순위로 끌어올릴 수 있다.

기본 weight는 1 이고, 0.1 도 가능



Query 표현식 조합 방법은

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html



예를 들어 filterQuery 를 조합할때


kind:hello 이고, status:Active, 이고, category_codes Array 값중 30이 포함된 항목을 필터링 하고싶으면


(and kind:'hello' status:'Active' (phrase field='category_codes' 30) )






Result

{
"status": {
"timems": 5,
"rid": "/M7W4bsqOgq1pko\u003d"
},
"hits": {
"found": 8,
"start": 0,
"hit": [
{
"id": "Marketplace_291",
"fields": {
"thumbnail": [
"http://**************/7b12910b-cc3c-4494-a504-ba00226b27f7.jpg"
],
"kind": [
"Marketplace"
],
"description": [
"Test"
],
"category_names": [
"Video Motion",
"Apple Motion Templates",
"Product Promo"
],
"_score": [
"15.213767"
],
"file_size": [
"21798.0"
],
"file_extensions": [
"jpg"
],
"happened_date": [
"2016-03-28T07:16:41.984Z"
],
"category_codes": [
"30",
"209",
"1730"
],
"creator_email": [
"hello@hello.com"
],
"price": [
"3.0"
],
"name": [
"Video Motion Apple"
],
"creator_name": [
"Creator"
],
"id": [
"291"
]
}
},
.............
]
}
}


결과중 짜증나는건, Field Type 이 Array 가 아닌것들도 Array 로 온다.........





'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



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