프로그래밍/ElasticSearch
[Elasticsearch] Index Mapping with java
스티브김스
2015. 7. 15. 21:44
elasticsearch에 인덱스를 만들때 일반 json ES query 로 만들 수 있지만 여기서는 자바로 인덱스를 생성하는 방법을 기록한다. elasticsearch에서는 쉽게 json 하이어라키를 만들어 낼 수 있도록 XcontentBuilder 클래스를 제공한다. startObject로 시작하여 field라는 항목으로 하위 노드에 추가 할 수 있다.
XContentBuilder mappings = null; try { mappings = XContentFactory.jsonBuilder(); mappings.startObject() .startObject("test_index") .field("dynamic","false") // dynamic mapping 을 거부한다. .startObject("_all").field("enabled",false).endObject() //모든 필드를 찾지 않도록 한다. .startObject("properties") // 인덱스 내부에 필드들은 properties 아래 만들어져야한다. .startObject("document_title") .field("type", "string") .startObject("norms").field("enabled", false).endObject() .field("store", "yes") // 인덱스에 추가하는 것 뿐 아니라 저장하여 디스플레이 가능하도록 setting .field("index", "analyzed") // 해당 필드 분석하도록 한다. .field("index_analyzer", "name_analyzer") // 인덱스시에 이용하는 analyzer를 명시할 수 있다. .field("search_analyzer", "name_analyzer") .endObject() .startObject("name_number").field("type", "long").field("store", "yes").endObject() .startObject("st_number").field("type", "long").field("store", "yes").endObject() .startObject("type_info") .field("type", "nested") // nested 항목으로 만들 수 있다. 이렇게 되면 하나의 document로 만들어지는 듯. .startObject("properties") .startObject("type_name") .field("type", "string") .endObject() .startObject("type_value") .field("type", "double") .endObject() .endObject() .endObject() .endObject() .endObject() .endObject(); } catch (IOException e) { e.printStackTrace(); } XContentBuilder indexSettings = null; try { indexSettings = XContentFactory.jsonBuilder(); indexSettings.startObject() .field("index.number_of_shards", 3) // 샤드 갯수 지정 .field("index.number_of_replicas", 3) // 레플리카 갯수 지정 // .field("index.store.type", "memory") // 메모리에 인덱스 데이터 저장 할 지 .endObject(); } catch (IOException e) { e.printStackTrace(); } CreateIndexRequestBuilder indexCreateRequest = client.admin().indices().prepareCreate(indexName) .addMapping("test_index", mappings) // 메핑 json 데이터를 인덱스 네임파라미터와 함께 setting .setSettings(indexSettings); // index setting 에 관한 정보는 setsettings라는 함수로 만듬 try{ indexCreateRequest.execute().actionGet(); }catch(Exception e){ e.printStackTrace(); }