Elasticsearch

Elastic Stack의 심장

Elasticsearch는 시간이 갈수록 증가하는 문제를 해결하는 분산형 RESTful 검색 및 분석 엔진입니다. Elastic Stack의 핵심과도 같은 Elasticsearch는 데이터를 중앙에 저장하여 예상 가능한 항목을 탐색하거나 예상치 못한 항목을 밝혀낼 수 있도록 지원합니다.

지금 Elasticsearch를 시작해 보세요 동영상 보기

New Enjoy an all-new Korean text analyzer, field aliases, and a weighted-average aggregation. Plus, 6.4 brings Kerberos and FIPS 140-2 support. Read More
쿼리

호기심을 갖고 데이터와 관련된 모든 종류의 질문을 던져 보세요

Elasticsearch는 정형 데이터, 비정형 데이터, 위치 정보, 메트릭 등 다양한 유형의 데이터를 사용자가 원하는 방식으로 검색하고 결합할 수 있도록 지원합니다. 하나의 간단한 질문으로 시작해서 어디까지 도달할 수 있는지 확인해 보세요.

분석

한 걸음 물러나 큰 그림을 내다보세요

검색 쿼리와 일치하는 10개의 도큐먼트를 찾는 것과 수십억 줄의 로그를 이해하는 것은 별개의 문제입니다. Elasticsearch 어그리게이션은 데이터를 확대하여 추이와 패턴을 살펴볼 수 있도록 지원합니다.

속도

Elasticsearch의 환상적인 속도를 경험해 보세요

문제에 대한 답을 얻게 되면 데이터와의 관계도 즉시 바뀌게 됩니다. 사용자는 반복적인 작업을 통해 범위를 더욱 확장할 수 있습니다.

Elasticsearch는 지금까지 경험할 수 없었던 환상적인 속도를 제공합니다. Elasticsearch는 전문 검색 쿼리를 위해 유한 상태 변환기를 통한 역 인덱스를 구현하고, 숫자 및 위치 데이터 저장을 위해 BKD tree를 구현하였으며, 분석을 위해 column store 를 구현했습니다.

모든 항목이 색인되기 때문에 어떤 정보도 놓치지 않고 빠른 속도로 액세스하여 활용할 수 있습니다.

확장성

작은 노트북부터
페타바이트의 데이터가 포함된 수백 개의 서버까지, Elasticsearch는 모든 유형의 인프라에서 실행이 가능합니다.

프로토타입에서 운영 배포까지 이어지는 모든 과정을 원활하게 처리할 수 있습니다. 백여 개의 노드 클러스터와 단일 클러스터 모두 동일한 방식으로 Elasticsearch를 실행합니다.

Elasticsearch는 수평적 확장을 통해 매초당 수많은 양의 이벤트를 처리할 수 있으며, 클러스터에서 인덱스와 쿼리 배포를 자동화하여 보다 원활한 시스템 운영을 지원합니다.

복원력

시스템은 Elasticsearch가 보호합니다

하드웨어 오류에 대비한 네트워크 분리. Elasticsearch는 발생 가능한 오류를 감지하여 클러스터와 기업 데이터를 안전하게 보호합니다.

Elasticsearch는 분산 환경으로 설계 가동되기 때문에 사용자가 오류를 염려할 필요가 없습니다.

유연성

다양한 사용 환경이 필요하신가요? Elasticsearch라면 문제 없습니다.

숫자, 텍스트, 위치 정보, 정형 데이터, 비정형 데이터 등 Elasticsearch는 모든 유형의 데이터를 환영합니다.

간편한 운영

이제 작업이 더욱 즐겁고 쉬워집니다

간단한 작업은 간단하게 처리할 수 있어야 합니다. Elasticsearch는 어떤 규모에서든 성능의 훼손 없이 간편하게 작업을 완료할 수 있도록 개발되었습니다.

클라이언트 라이브러리

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

Elasticsearch는 표준 RESTful API와 JSON을 사용하며 Java, Python, .NET, SQL, PHP같은 다양한 언어로 클라이언트를 구축하고 유지 관리합니다. Elasticsearch의 커뮤니티 또한 많은 기여를 하고 있습니다. 이러한 클라이언트는 사용하기 간편하며 Elasticsearch처럼 사용자가 수행하는 작업에 제한이 없습니다.

                                    curl -H "Content-Type: application/json" -XGET
'http://localhost:9200/social-*/_search' -d '{
  "query": {
    "match": {
      "message": "myProduct"
    }
  },
  "aggregations": {
    "top_10_states": {
      "terms": {
        "field": "state",
        "size": 10
      }
    }
  }
}'
                                
                                    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
                    new HttpHost("localhost", 9200, "http")));

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());            
searchSourceBuilder.aggregation(AggregationBuilders.terms("top_10_states").field("state").size(10));

SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("social-*");
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest);
                                
                                    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
      }
    }
  }
}
                                
                                    SELECT SCORE(), * FROM social-* 
   WHERE match(message, 'myProduct') 
   ORDER BY SCORE() DESC

SELECT state, COUNT(*) AS state_count FROM social-* 
   WHERE match(message, 'myProduct') 
   GROUP BY state LIMIT 10
                                
확장 기능들

데이터 보호와 모니터링

클러스터에 사용자 이름과 암호를 설정하고 Elasticsearch의 성능을 모니터링하거나 변칙을 감지하는 머신 러닝 작업을 실행할 수 있습니다. 이 모든 작업들은 확장 기능을 통해 간편하게 제공됩니다.

확장 기능은 Elasticsearch 에 손쉽게 설치가 가능하며 보안이나 모니터링, 알림, 보고, 그래프 탐색 같은 기능으로 완벽한 Elasticsearch 환경을 제공합니다.

HADOOP 과 SPARK

Elasticsearch와 Hadoop의 결합

Hadoop에서 대규모 데이터를 관리하시겠습니까? Elasticsearch-Hadoop (ES-Hadoop) 커넥터를 사용하여 빅데이터에 Elasticsearch의 실시간 검색 및 분석 기능을 활용할 수 있습니다. 이제 Hadoop에서도 Elasticsearch의 다양한 기능을 만나 보세요.