'elasticsearch'에 해당되는 글 420건

  1. 2014.03.24 Elasticsearch) The Definitive Guide...
  2. 2014.03.21 [Elasticsearch] 관리도구 만들때 유용한 REST API
  3. 2014.02.25 [lucene] IndexReader/Fields의 term 추출. 1
  4. 2014.02.24 [elasticsearch] internal mapper 알아보기.
  5. 2014.02.24 [elasticsearch] Core Type Mapper 기본값 알아보기.
  6. 2014.02.24 [elasticsearch] alias 설정 시 주의 사항.
  7. 2014.02.18 [elasticsearch] node.local 설정.
  8. 2014.02.17 [elasticsearch] elasticsearch.yml 설정 properties...
  9. 2014.02.17 [elasticsearch] tribe node into 1.0.0
  10. 2014.02.17 [elasitcsearch] changed connection pool into the 1.0.0

Elasticsearch) The Definitive Guide...

Elastic/Elasticsearch 2014. 3. 24. 09:55

지난 주에 관련 서적에 대해서 이야기를 들었는데 공식 블로그에 올라왔내요.

처음 접하시는 분들에게는 많은 도움이 되지 않을까 싶습니다.

아직은  abstract 밖에 없지만 조만간 업데이트 될것 같내요.


블로그 : http://www.elasticsearch.org/blog/elasticsearch-definitive-guide/ 

github : https://github.com/elasticsearch/elasticsearch-definitive-guide

:

[Elasticsearch] 관리도구 만들때 유용한 REST API

Elastic/Elasticsearch 2014. 3. 21. 01:12

elasticsearch 관리도구 만들때 유용한 REST API 입니다.

뭐 꼭 이런걸 만들 필요가 있나요 하시는 분들도 계실텐데요.


필요 할 수도 있습니다. ㅎㅎ


대표적인 오픈소스 기반의 플러그인은 잘 아시는 head, bigdesk, hq, paramedic 등등... 

오피셜 버전으로는 marvel도 있으니... 


중요한건 실시간 모니터링은 위 플러그인으로 되구요.

marvel 은 모니터링 데이터를 색인해서 저장하기 때문에 기간 단위 조회도 가능 하죠.


하지만 이 도구들의 단점이 있죠.

결국 모니터링 하고자 하는 노드에 설치가 되어야 한다는 문제점 입니다.

뭐 해결 방법은 많이 있겠죠.

가장 쉽게는  proxy 설정을 통해서 할 수도 있겠죠.


뭐 정리 하고 적어 봅시다.

쓸만한 REST API


[관리용 REST API]

- http://localhost:9200/_cluster/health?pretty=true

- http://localhost:9200/_nodes/stats?pretty=true

http://localhost:9200/_stats?pretty=true


그 이외는 이전에 한번 언급한적이 있는 것 같은데 _cat 을 한번 검토해 보시는 것도 좋습니다.


:

[lucene] IndexReader/Fields의 term 추출.

Elastic/Elasticsearch 2014. 2. 25. 11:19

Reference :

http://lucene.apache.org/core/4_4_0/core/org/apache/lucene/index/IndexReader.html

https://lucene.apache.org/core/4_4_0/core/org/apache/lucene/index/Fields.html


어느분이 물어 보셔서 공유 합니다.
현재 색인된 파일에서 색인된 term을 추출하고 싶으신 분들이 계신것 같습니다.

용도와 목적은 잘 모르겠지만 뭐 필요 하시니까 찾으시겠죠.


하지만 groupby 같은 기능을 구현하려고 하시는 거라면 그냥 facet을 사용하라고 추천 하고 싶습니다.


위에 링크 걸어 놓은 것 처럼 루씬의 IndexReader 를 이용해서 구현 가능 합니다.

IndexReader.getTermVectors(docID) : 문서 전체 term list

IndexReader.getTermVector(docId, field) : 문서의 특정 field 내 term list

문서에 설명이 잘 나와 있으니 참고하세요.

그리고 elasticsearch 에서는  ShardTermVectorService 에서 관련 기능을 제공하고 있습니다.


아래는 IndexReader 소스코드 입니다.


아래는 Fields 소스코드 입니다.



:

[elasticsearch] internal mapper 알아보기.

Elastic/Elasticsearch 2014. 2. 24. 17:01

core type에 대해서 알아 봤으니 internal field에 해당하는 field를 알아보겠습니다.

관련 패키지는 아래와 같습니다.

package org.elasticsearch.index.mapper.internal;


lucene 관련 소스도 core type에서 봤던것과 동일 합니다.

하지만 여기서는 추가 설명을 해드리도록 하겠습니다.

package org.apache.lucene.document;


public class FieldType implements IndexableFieldType {

..........

}



▶ setIndexed(boolean)

index yes, no 설정 입니다.


▶ setTokenized(boolean)

index analyzed, not_analyzed 설정 입니다.


▶ setStored(boolean)

store yes, no 설정입니다.


▶ setStoreTermVectors(boolean)

term_vector 에서 yes, no 설정 입니다.


▶ setStoreTermVectorOffsets(boolean)

term_vector 에서 with_offsets 설정 입니다.


▶ setStoreTermVectorPositions(boolean)

term_vector 에서 with_positions 설정 입니다.


▶ setOmitNorms(boolean)

norms.enabled 에서 true, false 설정 입니다.

elasticsearch에서 이름을 변경했는데요. 반대라고 이해 하시면 됩니다.

이 값은 보시면 AbstractFieldMapper 에서 기본 false 입니다. 즉 norms.enabled:true 라는 이야기가 됩니다.

뭐 당연한 이야기 입니다.

elasticsearch 에서는 기본 analyzed로 설정하기 때문입니다.


▶ setIndexOptions(IndexOptions value)

index_options 설정에서 docs(문서번호), freqs(문서번호 + term빈도수), positions(freqs + positions), offsets(positions + offsets) 설정 입니다.

analyzed 설정 시 기본 positions로 설정 되며, not_analyzed 설정 시 기본 docs로 설정 됩니다.



[All field]


public static final boolean ENABLED = true;

static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(true);
    FIELD_TYPE.freeze();
}



[Boost field]


public static final String NAME = "_boost";
public static final Float NULL_VALUE = null;

public static final FieldType FIELD_TYPE = new FieldType(NumberFieldMapper.Defaults.FIELD_TYPE);

static {
    FIELD_TYPE.setIndexed(false);
    FIELD_TYPE.setStored(false);
}



[Id field]


static {
    FIELD_TYPE.setIndexed(false);
    FIELD_TYPE.setStored(false);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();
}

public static final String PATH = null;



[Index field]


static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.setStored(false);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();
}

public static final EnabledAttributeMapper ENABLED_STATE = EnabledAttributeMapper.DISABLED;



[Parent field]


static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.setStored(true);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();
}



[Routing field]


static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.setStored(true);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();
}

public static final boolean REQUIRED = false;
public static final String PATH = null;



[Size field]


public static final EnabledAttributeMapper ENABLED_STATE = EnabledAttributeMapper.DISABLED;

public static final FieldType SIZE_FIELD_TYPE = new FieldType(IntegerFieldMapper.Defaults.FIELD_TYPE);

static {
    SIZE_FIELD_TYPE.freeze();
}



[Source field]


public static final boolean ENABLED = true;
public static final long COMPRESS_THRESHOLD = -1;
public static final String FORMAT = null; // default format is to use the one provided

static {
    FIELD_TYPE.setIndexed(false);
    FIELD_TYPE.setStored(true);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();
}



[Timestamp field]


public static final FieldType FIELD_TYPE = new FieldType(DateFieldMapper.Defaults.FIELD_TYPE);

static {
    FIELD_TYPE.setStored(false);
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.freeze();
}

public static final EnabledAttributeMapper ENABLED = EnabledAttributeMapper.DISABLED;
public static final String PATH = null;
public static final FormatDateTimeFormatter DATE_TIME_FORMATTER = Joda.forPattern(DEFAULT_DATE_TIME_FORMAT);



[Ttl field]


public static final FieldType TTL_FIELD_TYPE = new FieldType(LongFieldMapper.Defaults.FIELD_TYPE);

static {
    TTL_FIELD_TYPE.setStored(true);
    TTL_FIELD_TYPE.setIndexed(true);
    TTL_FIELD_TYPE.setTokenized(false);
    TTL_FIELD_TYPE.freeze();
}

public static final EnabledAttributeMapper ENABLED_STATE = EnabledAttributeMapper.DISABLED;
public static final long DEFAULT = -1;



[Type field]


static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.setStored(false);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();
}



[Uid field]


public static final FieldType NESTED_FIELD_TYPE;

static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.setStored(true);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(FieldInfo.IndexOptions.DOCS_ONLY);
    FIELD_TYPE.freeze();

    NESTED_FIELD_TYPE = new FieldType(FIELD_TYPE);
    NESTED_FIELD_TYPE.setStored(false);
    NESTED_FIELD_TYPE.freeze();
}


:

[elasticsearch] Core Type Mapper 기본값 알아보기.

Elastic/Elasticsearch 2014. 2. 24. 16:27

elasticsearch의 document type property 설정 시 core type에 대한 기본값 구성이 어떻게 되는지 살펴 보기로 하겠습니다.

우선 elasticsearch 관련 패키지는 아래와 같습니다.


package org.elasticsearch.index.mapper.core


lucene 은 아래 class를 참고하세요.


org.apache.lucene.document.FieldType


그럼 이제 부터 core type mapper 정보를 살펴 보겠습니다.

기본적으로 모든 field는 AbstractFieldMapper 를 상속 받아서 사용합니다.


[AbstractFieldMapper type]


static {
    FIELD_TYPE.setIndexed(true);
    FIELD_TYPE.setTokenized(true);
    FIELD_TYPE.setStored(false);
    FIELD_TYPE.setStoreTermVectors(false);
    FIELD_TYPE.setOmitNorms(false);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);
    FIELD_TYPE.freeze();
}



[Number type]


static {
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.setStoreTermVectors(false);
    FIELD_TYPE.freeze();
}
public static final Explicit<Boolean> IGNORE_MALFORMED = new Explicit<Boolean>(false, false);
public static final Explicit<Boolean> COERCE = new Explicit<Boolean>(true, false);



[String type]


public static final String NULL_VALUE = null;
public static final int POSITION_OFFSET_GAP = 0;
public static final int IGNORE_ABOVE = -1;



[Binary type]


static {
    FIELD_TYPE.setIndexed(false);
    FIELD_TYPE.freeze();
}



[Boolean type]


static {
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.setIndexOptions(IndexOptions.DOCS_ONLY);
    FIELD_TYPE.setTokenized(false);
    FIELD_TYPE.freeze();
}


public static final Boolean NULL_VALUE = null;



[Byte type]


static {
    FIELD_TYPE.freeze();
}

public static final Byte NULL_VALUE = null;



[Completion type]


static {
    FIELD_TYPE.setOmitNorms(true);
    FIELD_TYPE.freeze();
}

public static final boolean DEFAULT_PRESERVE_SEPARATORS = true;
public static final boolean DEFAULT_POSITION_INCREMENTS = true;
public static final boolean DEFAULT_HAS_PAYLOADS = false;
public static final int DEFAULT_MAX_INPUT_LENGTH = 50;



[Date type]


static {
    FIELD_TYPE.freeze();
}

public static final FormatDateTimeFormatter DATE_TIME_FORMATTER = Joda.forPattern("dateOptionalTime", Locale.ROOT);
public static final String NULL_VALUE = null;
public static final TimeUnit TIME_UNIT = TimeUnit.MILLISECONDS;
public static final boolean ROUND_CEIL = true;



[Double type]


static {
    FIELD_TYPE.freeze();
}

public static final Double NULL_VALUE = null;



[Float type]


static {
    FIELD_TYPE.freeze();
}

public static final Float NULL_VALUE = null;



[Integer type]


static {
    FIELD_TYPE.freeze();
}

public static final Integer NULL_VALUE = null;



[Long type]


static {
    FIELD_TYPE.freeze();
}

public static final Long NULL_VALUE = null;



[Short type]


static {
    FIELD_TYPE.freeze();
}


public static final Short NULL_VALUE = null;


:

[elasticsearch] alias 설정 시 주의 사항.

Elastic/Elasticsearch 2014. 2. 24. 13:46

[참고문서]

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html


elasticsearch에서 제공하고 있는 alias 기능은 매우 유용하게 사용할 수 있습니다.


1. 기본기능 - 별칭

- 분리 구성된 여러개의 인덱스를 묶어 하나의 인덱스처럼 사용이 가능합니다. 물론 검색 시 여러 인덱스로 질의할 수 있으나 매개변수로 지정해야 하는 불편함이 존재 하게 됩니다.

- 말 그대로 alias 기능의 별칭은 검색 목적에 맞게 인덱스 구성을 할 수 있다는 장점을 제공해 줍니다.


2.검색기능 - 필터

- 별칭 지정 후 filter 기능을 이용하여 별도 색인 또는 데이터 가공없이 가상의 인덱스를 구성할 수 있게 됩니다. 어디서 활용이 가능 할까요? 실시간 분석이나 사전 색인데이터 필터링을 통해 기능 확장이 가능해 보입니다.

- 검색 조건에서 사용하는 필터와 같은 기능을 제공하기 때문에 활용 범위는 다양합니다.


3. 분산/게이트웨이기능 - 라우팅

- 색인 시 지정한 샤드로만 데이터를 모을수도 있고, 검색 시 지정한 샤드로만 검색 질의를 수행할 수 있습니다.

- 즉, 불필요한 데이터 분산(샤딩) 작업을 줄일 수 있는 기능 입니다.

※ 샤드 지정 시 string 으로 지정해야 정상적으로 설정이 됨.


전에도 언급한적이 있지만 별칭을 통해 전체색인한 인덱스를 변경할 경우 서비스 다운타임 없이 적용하는데 유용한 기능이니 참고 하시면 좋을 것 같습니다.

:

[elasticsearch] node.local 설정.

Elastic/Elasticsearch 2014. 2. 18. 10:33

개발환경에서 또는 그냥 내 개발 장비에서 테스트 할때 설정 하시면 됩니다.

불필요한 traffic 을 유발 하거나 warning 을 던지지 않기 떄문에 뭐 그래도 도움이 되지 않겠어요. :)


node.local: true 로 설정 하시면 되는데, 이 설정 말고 node.mode 설정이 또 있죠.

둘 중 하나만 설정 하셔도 됩니다.


[원문]

Is the node a local node. A local node is a node that uses a local (JVM level) discovery and transport. Other (local) nodes started within the same JVM (actually, class-loader) will be discovered and communicated with. Nodes outside of the JVM will not be discovered.


:

[elasticsearch] elasticsearch.yml 설정 properties...

Elastic/Elasticsearch 2014. 2. 17. 17:30

elasticsearch 1.0.0 기준 입니다.

그냥 default 만 보셔도 뭐 되지만 혹시라도 궁금하신 분들이 계실 수도 있어서 공유해 봅니다.

대부분 값은 default 설정 값이니 별도 튜닝은 하셔야 합니다.

여기서 어떤 값을 튜닝 하느냐에 따라서 성능이 좋아 질수도 나빠 진수도 있겠죠. :)


#[SERVER]
bootstrap.mlockall: true            # swap avoid, ulimit -l unlimited

#[CLUSTER]
#[ClusterName, NodeBuilder, TribeService settings]
cluster.name: gsshop_genie_cluster

#[ConcurrentRebalanceAllocationDecider]
cluster.routing.allocation.cluster_concurrent_rebalance: 2

#[ThrottlingAllocationDecider]
cluster.routing.allocation.node_initial_primaries_recoveries: 4
cluster.routing.allocation.node_concurrent_recoveries: 2

#[ClusterRebalanceAllocationDecider]
cluster.routing.allocation.allow_rebalance: "indices_all_active"

#[EnableAllocationDecider]
cluster.routing.allocation.enable: "all"
index.routing.allocation.enable: "all"

#[NODE]
#[DiscoveryNode, DiscoveryNodeService]
node.name: NODE_NAME
node.master: true
node.data: true
node.mode: network

#[INDEX - IndexDynamicSettingsModule]
#[IndexMetaData settings]
index.number_of_shards: 5
index.number_of_replicas: 1

#[settings]
index.mapper.dynamic: true

#[IndexStoreModule settings]
index.store.type: "mmapfs"

#[IndexDynamicSettingsModule settings]
index.compound_format: false
index.compound_on_flush: true
index.shard.check_on_startup: false        # true/fix/false

#[IndexFieldDataService, IndicesFilterCache settings]
index.fielddata.cache: "node"            # resident(in memory), soft(OOM control), node(default)
index.cache.filter.size: -1
index.cache.filter.expire: -1

#[InternalIndexShard settings]
index.refresh_interval: "1s"

#[IndexDynamicSettingsModule, TieredMergePolicyProvider settings]
index.merge.async: true
index.merge.policy.expunge_deletes_allowed: 10
index.merge.policy.floor_segment: 2mb
index.merge.policy.max_merge_at_once: 10
index.merge.policy.max_merge_at_once_explicit: 30
index.merge.policy.max_merged_segment: 5gb
index.merge.policy.segments_per_tier: 10
index.reclaim_deletes_weight: 2.0

#[TranslogModule, TranslogService, FsTranslog settings]
index.translog.fs.type: simple
index.translog.flush_threshold_ops: 5000
index.translog.flush_threshold_size: 200mb
index.translog.flush_threshold_period: 30m

#[LocalGatewayAllocator settings]
index.recovery.list_itmeout: "30s"
index.recovery.initial_shards: "quorum"

#[InternalEngine, IndexingMemoryController settings]
indices.memory.index_buffer_size: 10%

#[RecoverySettings settings]
index.shard.recovery.file_chunk_size: 512kb
index.shard.recovery.translog_ops: 1000
index.shard.recovery.translog_ops: 512kb
indices.recovery.max_bytes_per_sec: 0
indices.recovery.concurrent_streams: 3
index.shard.recovery.concurrent_small_file_streams: 2

#[IndicesFieldDataCache settings]
indices.fielddata.cache.size: 20%
indices.fielddata.cache.expire: 15m

#[IndicesFilterCache settings]
indices.cache.filter.size: "20%"
indices.cache.filter.expire: 15m
indices.cache.clean_interval: "60s"

#[AutoCreateIndex settings]
action.auto_create_index: true

#[TransportNodesShutdownAction settings]
action.disable_shutdown: false        # rest api parameter : delay(default 200ms)

#[TransportShardReplicationOperationAction settings]
action.replication_type: async
action.write_consistency: quorum

#[NETWORK]
#[NetworkService settings]
network.host: NODE_IP
network.tcp.no_delay: true
network.tcp.reuse_address: true

#[Transport, NettyTransport settings]
transport.host: NODE_IP
transport.tcp.port: 9300
transport.tcp.connect_timeout: 30s
transport.tcp.compress: true

#[NettyHttpServerTransport settings]
http.port: 9200
http.max_content_length: 100mb
http.compression: true
http.compression_level: 6

#[InternalNode, TribeService settings]
http.enabled: true

#[ThreadPool default settings]
threadpool.generic.type: cached
threadpool.generic.keep_alive: "30s"
threadpool.index.type: fixed
threadpool.index.size: 2                # availableProcessors
threadpool.index.queue_size: 200
threadpool.bulk.type: fixed
threadpool.bulk.size: 2                 # availableProcessors
threadpool.bulk.queue_size: 50
threadpool.get.type: fixed
threadpool.get.size: 2                    # availableProcessors
threadpool.get.queue_size: 1000
threadpool.search.type: fixed
threadpool.search.size: 6                # availableProcessors x 3
threadpool.search.queue_size: 1000
threadpool.suggest.type: fixed
threadpool.suggest.size: 2                    # availableProcessors
threadpool.suggest.queue_size: 1000
threadpool.percolate.type: fixed
threadpool.percolate.size: 2                    # availableProcessors
threadpool.percolate.queue_size: 1000
threadpool.management.type: scailing
threadpool.management.keep_alive: "5m"
threadpool.management.size: 5
threadpool.flush.type: scailing
threadpool.flush.keep_alive: "5m"
threadpool.flush.size: 2                # Math.min( ( ( availableProcessors + 1 ) / 2 ), 5 )
threadpool.merge.type: scailing
threadpool.merge.keep_alive: "5m"
threadpool.merge.size: 2                # Math.min( ( ( availableProcessors + 1 ) / 2 ), 5 )
threadpool.refresh.type: scailing
threadpool.refresh.keep_alive: "5m"
threadpool.refresh.size: 2                # Math.min( ( ( availableProcessors + 1 ) / 2 ), 10 )
threadpool.warmer.type: scailing
threadpool.warmer.keep_alive: "5m"
threadpool.warmer.size: 5
threadpool.snapshot.type: scailing
threadpool.snapshot.keep_alive: "5m"
threadpool.snapshot.size: 5
threadpool.optimize.type: fixed
threadpool.optimize.size: 1

#[GATEWAY]
#[GatewayModule, GatewayService settings]
gateway.type: local
gateway.recover_after_nodes: 1
gateway.recover_after_time: 1m
gateway.recover_after_data_nodes: 1
gateway.recover_after_master_nodes: 1
gateway.expected_nodes: 1
gateway.expected_data_nodes: 1
gateway.expected_master_nodes: 1

#[ZenDiscovery, ZenPingService, UnicastZenPing settings]
discovery.zen.ping.multicast.enabled: false
discovery.zen.minimum_master_nodes: 2            # master node N 일 경우 (N/2 + 1)
discovery.zen.ping.timeout: 3s
discovery.zen.ping.unicast.hosts: ["NODE_IP:NODE_PORT", ..., "NODE_IP:NODE_PORT"]
discovery.zen.ping.unicast.concurrent_connects: 10


:

[elasticsearch] tribe node into 1.0.0

Elastic/Elasticsearch 2014. 2. 17. 17:25

1.0.0 에 들어온 기능인데 이게 물건이내요.

문서만 일단 봤는데 ㅎㅎ 유용하게 써먹을 수 있을 것 같습니다.


http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-tribe.html


간단하게 설명 하면 cluster 간 federated search 기능을 제공 하는 것입니다. :)

node.client 가 왜 생겼는지도 알겠내요. (꼭 이것 때문에 생긴건 아니겠지만...)

:

[elasitcsearch] changed connection pool into the 1.0.0

Elastic/Elasticsearch 2014. 2. 17. 15:43

es 0.90.x 까지 사용하던 connection pool 설정이 1.0.0 에서 조금 바뀌었습니다.
ping, high 는 그대로이구요.
recovery, reg, bulk 가 추가 되었는데 reg는 middle 이 바뀐거고, bulk 는 low 가 바뀐겁니다.
용도에 맞게 이름을 변경했내요. 참고하세요 ~

https://github.com/elasticsearch/elasticsearch/blob/master/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java


        this.connectionsPerNodeRecovery = componentSettings.getAsInt("connections_per_node.recovery", settings.getAsInt("transport.connections_per_node.recovery", 2));
        this.connectionsPerNodeBulk = componentSettings.getAsInt("connections_per_node.bulk", settings.getAsInt("transport.connections_per_node.bulk", 3));
        this.connectionsPerNodeReg = componentSettings.getAsInt("connections_per_node.reg", settings.getAsInt("transport.connections_per_node.reg", 6));
        this.connectionsPerNodeState = componentSettings.getAsInt("connections_per_node.high", settings.getAsInt("transport.connections_per_node.state", 1));
        this.connectionsPerNodePing = componentSettings.getAsInt("connections_per_node.ping", settings.getAsInt("transport.connections_per_node.ping", 1));


: