[elasticsearch] Java API : Index
Elastic/Elasticsearch 2013. 4. 8. 18:42본 문서는 개인적인 테스트와 elasticsearch.org 그리고 community 등을 참고해서 작성된 것이며,
정보 교환이 목적입니다.
잘못된 부분에 대해서는 지적 부탁 드립니다.
(예시 코드는 성능 및 보안 검증이 되지 않았습니다.)
[elasticsearch java api 리뷰]
원문 링크 : http://www.elasticsearch.org/guide/reference/java-api/index_/
json document 를 생성하는 몇 가지 방법을 설명하고 있습니다.
There are different way of generating JSON document:
- Manually (aka do it yourself) using native byte[] or as a String
- Using Map that will be automatically converted to its JSON equivalent
- Using a third party library to serialize your beans such as Jackson
- Using built-in helpers XContentFactory.jsonBuilder()
위 방법들 중에서 제일 아래 elasticsearch helper 를 이용한 방법을 테스트해 봅니다.
우선 간단하게 index 와 index type 을 정의해 보도록 하겠습니다.
curl -XPUT 'http://localhost:9200/facebook' -d '{
"settings" : {
"number_of_shards" : 5,
"number_of_replicas" : 1
},
"mappings" : {
"post" : {
"properties" : {
"docid" : { "type" : "string", "store" : "yes", "index" : "not_analyzed" },
"title" : { "type" : "string", "store" : "yes", "index" : "analyzed", "term_vector" : "yes", "analyzer" : "standard" }
}
}
}
}'
- index 는 facebook 으로 생성을 하고
- index type 은 post 라고 생성을 합니다.
- settings 와 mappings 에 대한 상세한 내용은 아래 링크 참고 하시기 바랍니다.
http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index/
http://www.elasticsearch.org/guide/reference/index-modules/
http://www.elasticsearch.org/guide/reference/mapping/
http://www.elasticsearch.org/guide/reference/mapping/core-types/
index, index type 생성이 끝났으면 이제 색인을 해보도록 하겠습니다
// 생성할 문서가 아래와 같다고 가정
// curl -XPUT 'http://localhost:9200/facebook/post/1' -d '{ "docid" : "henry", "title" : "This is the elasticsearch hadoop test." }'
// curl -XPUT 'http://localhost:9200/facebook/post/2' -d '{ "docid" : "henry", "title" : "elasticsearch test." }'
// curl -XPUT 'http://localhost:9200/facebook/post/3' -d '{ "docid" : "howook", "title" : "hadoop test." }'
// curl -XPUT 'http://localhost:9200/facebook/post/4' -d '{ "docid" : "howook", "title" : "test." }'
IndexRequestBuilder requestBuilder;
IndexResponse response;
requestBuilder = client.prepareIndex("facebook", "post");
// setSource parameter 로 json string 형태로 등록
requestBuilder.setId("1");
requestBuilder.setSource("{ \"docid\" : \"henry\", \"title\" : \"This is the elasticsearch hadoop test.\" }");
response = requestBuilder.execute().actionGet();
// XContentBuilder 로 setSource 전달
XContentBuilder jsonBuilderDocument = jsonBuilder().startObject();
jsonBuilderDocument.field("docid", "henry");
jsonBuilderDocument.field("title", "elasticsearch test.");
jsonBuilderDocument.endObject();
requestBuilder.setId("2");
requestBuilder.setSource(jsonBuilderDocument);
response = requestBuilder.execute().actionGet();
- IndexRequestBuilder 의 setSource 에 대한 코드를 보시면 어떤 arguments 받는지 알 수 있습니다.
- 그리고 문서 색인에 사용되는 여러가지 다양항 옵션들은 아래 링크를 참고 하시기 바랍니다.
http://www.elasticsearch.org/guide/reference/api/index_/
아래는 index 생성 시 필요한 settings 와 mappings 에 대한 예제 코드 입니다.
맛보기 참고용 입니다.
IndicesAdminClient indices = client.admin().indices();
CreateIndexRequest indexRequest = new CreateIndexRequest("INDEX_NAME");
indexRequest
.settings(jsonBuilderIndexSetting)
.mapping("INDEX_TYPE_NAME", jsonBuilderIndiceSetting);
indices.create(indexRequest).actionGet();
- INDEX_NAME 은 생성한 index
- INDEX_TYPE_NAME 은 생성한 index type
- jsonBuilerIndexSetting 과 jsonBuilderIndiceSetting 은 XContentBuilder 객체