Elasticsearch

Elastic Stack의 심장

Elasticsearch는 점점 많은 문제를 해결하는 분산형 RESTful 검색 및 분석 엔진입니다. Elastic Stack의 핵심으로, 데이터를 중심부에 저장하여 예상되는 항목을 검색하고 예상치 못한 항목을 밝혀낼 수 있습니다.

Elasticsearch를 시작해보세요 지금 보기

New More secure, ludicrously fast, and packed with new features including super efficient numbers and a secure new built-in scripting language. Read More

쿼리

호기심을 갖고 데이터와 관련된 모든 종류의 질문을 던져 보십시오.

Elasticsearch에서는 정형, 비정형, 위치정보, 메트릭 등 원하는 방법으로 다양한 유형의 검색을 수행하고 결합할 수 있습니다. 하나의 간단한 질문으로 시작해서 어디까지 도달할 수 있는지 확인해 보세요.

분석

한 걸음 물러나 큰 그림을 보십시오.

검색 쿼리와 일치하는 10개의 도큐먼트를 찾는 것은 중요합니다. 하지만 수십억 줄의 로그를 이해하려면 어떻게 해야 할까요? Elasticsearch 어그리게이션을 이용하면 데이터를 확대하여 추이와 패턴을 살펴볼 수 있습니다.

속도

Elasticsearch는 빠릅니다. 정말 빠릅니다.

답을 얻게 되면 즉시 데이터와의 관계가 바뀝니다. 범위를 확장하여 질문을 반복할 수 있습니다.

이렇게 빠르기는 쉽지 않습니다. Easticsearch는 전문 검색 쿼리를 위해 유한 상태 변환기를 통한 역 인덱스를 구현하고, 숫자 및 위치 데이터 저장을 위해 BKD tree를 구현하였으며, 분석을 위해 column store 를 구현했습니다.

모든 항목이 색인 되기 때문에 어떤 인덱스도 아쉽지 않을 것입니다. 모든 데이터를 놀랍게 빠른 속도로 액세스하여 활용할 수 있습니다.

확장성

작은 노트북부터 페타바이트의 데이터가 포함된 수백 개의 서버에서 모두 실행할 수 있습니다.

프로토타입에서 운영 배포까지의 과정이 수월합니다. 300개의 노드와 단일 노드에서 실행되는 Elasticsearch 클러스터 모두 동일한 방식으로 대화합니다.

원활한 작업을 위해 Cluster에서 인덱스와 쿼리 배포 방법을 자동으로 관리하면서 초당 엄청난 양의 이벤트를 처리할 수 있도록 수평적 확장이 가능합니다.

운용의 즐거움

모두 양손 들고 소리 지르십시오!
(그리고 책상에 앉을 땐 내리십시오.)

간단한 작업은 간단해야 합니다. Elasticsearch는 어떤 규모에서도 성능의 훼손 없이 작업이 간편하도록 제작되었습니다.

클라이언트 라이브러리

원하는 프로그래밍 언어로 Elasticsearch와 상호 작용

Elasticsearch는 표준 RESTful API와 JSON을 사용합니다. 또한 Elasticsearch는 다양한 언어로 클라이언트를 구축하고 유지 관리합니다. 이러한 클라이언트는 작업하기 쉽고, 사용하기 자연스러우며, Elasticsearch와 마찬가지이기 때문에 클라이언트에서 수행하는 작업에 제한이 없습니다.  더 보기

                                    curl -XGET 'http://localhost:9200/social-*/_search' -d '{
  "query": {
    "match": {
      "message": "myProduct"
    }
  },
  "aggregations": {
    "top_10_states": {
      "terms": {
        "field": "state",
        "size": 10
      }
    }
  }
}'
                                
                                    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
   .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

SearchResponse sr = client.prepareSearch()
 .setQuery(QueryBuilders.matchQuery("message", "myProduct"))
 .addAggregation(AggregationBuilders.terms("top_10_states")
 .field("state").size(10))
 .execute().actionGet();

client.close();
                                
                                    var client = new ElasticClient();

var searchResponse = client.Search<Tweet>(s => s
    .Index("social-*")
    .Query(q => q
        .Match(m => m
            .Field(f => f.Message)
            .Query("myProduct")
        )
    )
    .Aggregations(a => a
        .Terms("top_10_states", t => t
            .Field(f => f.State)
            .Size(10)
        )
    )
);
                                
                                    from elasticsearch import Elasticsearch

esclient = Elasticsearch(['localhost:9200'])
response = esclient.search(
index='social-*',
body={
    "query": {
        "match": {
            "message": "myProduct"
        }
    },
    "aggs": {
        "top_10_states": {
            "terms": {
                "field": "state",
                "size": 10
            }
        }
    }
}
)
                                
                                    var elasticsearch = require('elasticsearch');
var esclient = new elasticsearch.Client({
  host: 'localhost:9200'
});
esclient.search({
  index: 'social-*',
  body: {
    query: {
      match: { message: 'myProduct' }
    },
    aggs: {
      top_10_states: {
        terms: {
            field: 'state',
            size: 10
        }
      }
    }
  }
}
).then(function (response) {
    var hits = response.hits.hits;
}
);
                                
                                    $esclient = Elasticsearch\ClientBuilder::create()
              ->setHosts(["localhost:9200"])
              ->build();
$params = [
'index' => 'social-*',
'body' => [
    'query' => [
        'match' => [ 'message' => 'myProduct' ]
    ],
    'aggs' => [
        'top_10_states' => [
            'terms' => [
                'field' => 'state',
                'size' => 10,
            ]
        ]
    ]
]
];
$response = $esclient->search($params);
                                
                                    use Search::Elasticsearch;

my $esclient = Search::Elasticsearch->new( nodes => 'localhost:9200' );
my $response = $esclient->search(
index => 'social-*',
body => {
        query => {
            match => { message => 'myProduct' }
        },
        aggs => {
            top_10_states => {
                terms => {
                    field => 'state',
                    size => 10
                }
            }
        }
    }
);
                                
                                    require 'elasticsearch'

esclient = Elasticsearch::Client.new

response = esclient.search index: 'social-*', body: {
  query: {
    match: {
      message: 'myProduct'
    }
  },
  aggregations: {
    top_10_states: {
      terms: {
        field: 'state',
        size: 10
      }
    }
  }
}
                                
엔터프라이즈 지원

보호하고 모니터링하십시오.

Cluster에 사용자 이름과 암호 설정을 원하십니까? Security를 설치하면 됩니다. Elasticsearch의 성능을 알고 싶으십니까? Monitoring을 추가하십시오. 이 모두가 X-Pack을 통해 제공됩니다.

X-Pack는 쉽게 설치되어 사용 가능한 범위를 확장해주며, 보안, 모니터링, 알림, 보고 및 그래프 탐색 기능으로 완벽한 Elasticsearch 환경을 제공합니다.

HADOOP 과 SPARK

Elasticsearch 와 Hadoop의 조합

대규모 데이터를 Hadoop에서 관리 하시겠습니까? Elasticsearch-Hadoop (ES-Hadoop) 커넥터를 사용하여, Elasticsearch의 실시간 검색 및 분석 기능을 빅데이터에서 작업하십시오. 이것은 두 세계를 연결하는 최적의 방법입니다.