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



Email Address, First Name, Last Name 세가지 데이터로


해당 유저의 정보를 조회할 수 있다. 세가지 전부 대소문자 구분없이 입력해도 되지만, 띄워쓰기는 정확해야한다.


조회 가능한 정보

String accountStatus;
String countryCode;
String emailAddress;
String accountType;
String accountId;
String businessName;
String salutation;
String firstName;
String middleName;
String lastName;
String suffix;


pom.xml

<dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>adaptiveaccountssdk</artifactId>
<version>2.6.106</version>
</dependency>



sdk_config.properties 


https://github.com/paypal/PayPal-Java-SDK/blob/master/rest-api-sdk/src/test/resources/sdk_config.properties


properties 파일을 열면 아래 네가지가 필수인데, Sandbox 로 테스트할때는 기존에 있는대로 해도 동작하지만

live 모드에서는 error

acct1.UserName=*****
acct1.Password=********
acct1.Signature=***********
acct1.AppId=**************


일단 PayPal Account credentials 정보(acct1.UserName, acct1.Password, acct1.Signature)가 필요한데 

아래 링크를 따라하면 3가지를 얻을 수 있다.

https://developer.paypal.com/docs/classic/api/apiCredentials/


다음 한가지 acct1.AppId 는 

https://www.paypal-apps.com 에서 등록해야한다. 뭐 이것저것 많이 넣어줘야하는데 가장 중요한건


Get Verified Status 를 체크해줘야 한다. 다른건 필요하면 체크하세요




필수 정보를 다 입력하고 나면 아래그림처럼 보통 status 가 Approved Automatically 가 된다.


그 위에 있는 Live App ID 가 필요한 정보다. 복사해서 acct1.AppId 에 넣어주자.





다음은 아래쪽으로 내려가면 service.EndPoint.AdaptiveAccounts 가 주석으로 돼있는데 해제해야한다.

# AdaptiveAccounts Platform Service
service.EndPoint.AdaptiveAccounts=https://svcs.paypal.com/



Code


GetVerifiedStatusRequest request = new GetVerifiedStatusRequest();

request.setMatchCriteria("NAME");
request.setEmailAddress(email);
request.setFirstName(firstName);
request.setLastName(lastName);

AdaptiveAccountsService aas = new AdaptiveAccountsService(
new File("src/main/resources/sdk_config_live.properties"));
GetVerifiedStatusResponse response = aas.getVerifiedStatus(request);
String status = response.getAccountStatus();



참고

https://github.com/paypal/adaptiveaccounts-sdk-java

http://stackoverflow.com/questions/3228963/how-to-validate-paypal-account






'PayPal' 카테고리의 다른 글

[PayPal SDK] Email Address 로 해당 User 정보 조회  (0) 2016.03.08
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST