>  기사  >  백엔드 개발  >  엘라스틱서치란 무엇인가요? Elasticsearch는 어디에 사용될 수 있나요?

엘라스틱서치란 무엇인가요? Elasticsearch는 어디에 사용될 수 있나요?

零下一度
零下一度원래의
2017-06-23 16:10:364052검색
  • Elasticsearch 버전: 5.4

  • Elasticsearch 빠른 시작 파트 1: Elasticsearch 시작하기

  • Elasticsearch 빠른 시작 파트 2: Elasticsearch 및 Kibana 설치

  • Elasticsearch 빠른 시작 파트 3: Elasticsearch 색인 및 문서 작업

  • Elasticsearch 빠른 시작 4부: Elasticsearch 문서 쿼리

Elasticsearch는 확장성이 뛰어난 오픈 소스 전체 텍스트 검색 및 분석 엔진입니다. 대규모 데이터를 거의 실시간으로 신속하게 저장, 검색, 분석할 수 있습니다. 일반적으로 복잡한 검색 기능과 요구 사항이 있는 애플리케이션에 대한 강력한 지원을 제공하기 위해 기본 엔진/기술로 사용됩니다.

Elasticsearch 는 다음 장소에서 사용할 수 있습니다:

  1. 고객이 판매 중인 제품을 검색할 수 있는 온라인 상점 웹사이트가 있다고 가정해 보겠습니다. 이 경우 Elasticsearch 를 사용하여 전체 제품 카탈로그와 재고를 저장하고 검색을 제공할 뿐만 아니라 자동으로 몇 가지 제안을 제공할 수 있습니다.

  2. 로그나 거래 데이터를 수집하고 분석 및 마이닝을 통해 추세, 통계, 요약 또는 이상 징후를 찾고 싶다고 가정해 보세요. 이 경우 LogStash(Elasticsearch/Logstash/Kibana스택의 일부)를 사용하여 데이터를 수집, 집계 및 구문 분석한 다음 이 데이터를 LogStash를 통해 Elasticsearch 에 전달할 수 있습니다. Elasticsearch 에 데이터가 있으면 관심 있는 정보를 검색하고 집계할 수 있습니다.

  3. 가격 알림 플랫폼을 운영하고 가격에 정통한 고객에게 "나는 특정 전자 기기를 구매하는 데 관심이 있습니다. 다음 달 내에 가격이 $x보다 낮은 판매자가 있습니다."와 같은 규칙을 지정하도록 한다고 가정해 보겠습니다. , 받고 싶습니다. "알려주세요". 이 경우 판매자의 가격을 Elasticsearch에 제출하고 역검색(필터)을 사용하여 가격 변경 사항을 고객 쿼리와 일치시키고 일치하는 항목이 발견되면 고객에게 알릴 수 있습니다.

  4. 대량(수백만 또는 수십억 개의 레코드)의 데이터에서 임시 문제를 신속하게 조사, 분석, 시각화 및 찾아내려는 분석(비즈니스 인텔리전스) 요구와 욕구가 있다고 가정해 보겠습니다. 이 경우 Elasticsearch 를 사용하여 데이터를 저장한 다음 Kibana (Elasticsearch 스택의 일부)를 사용하여 사용자 정의 대시보드를 구축하여 중요한 데이터를 시각화할 수 있습니다. 또한 Elasticsearch 집계 기능을 사용하여 데이터를 기반으로 복잡한 비즈니스 인텔리전스 쿼리를 수행할 수 있습니다.

이 튜토리얼의 나머지 부분에서는 Elasticsearch의 시작 및 실행 프로세스를 안내하고 데이터 인덱싱, 검색 및 수정과 같은 몇 가지 기본 작업을 보여 드리겠습니다. 이 튜토리얼을 마치면 Elasticsearch가 무엇인지, 어떻게 작동하는지 더 깊이 이해하게 될 것입니다. 이를 사용하여 정교한 검색 애플리케이션을 구축하고 데이터에서 유용한 정보를 발견할 수 있는 영감을 얻으시길 바랍니다.

기본 개념(Basic Concepts)

Elasticsearch의 핵심인 몇 가지 개념이 있습니다. 처음부터 이러한 개념을 이해하면 나중에 학습하는 데 큰 도움이 됩니다.

Near Real Time(NRT)

Elasticsearch 은 거의 실시간 검색 플랫폼입니다. 이는 문서가 색인화되는 시점부터 검색이 가능해지는 시점까지 약간의 지연(보통 1초)만 있음을 의미합니다.

클러스터(Cluster)

클러스터는 모든 데이터를 저장하기 위해 통합되고 모든 노드에서 인덱싱 및 검색 작업을 수행할 수 있는 하나 이상의 노드(서버)의 모음입니다. 클러스터는 고유한 이름으로 식별되며 기본값은 "elasticsearch"입니다. 노드는 하나의 클러스터에만 속할 수 있고 클러스터 이름에 따라 클러스터에 참여할 수 있기 때문입니다. 그래서 이름이 중요해요.

다른 환경에서 동일한 클러스터 이름을 사용하지 마십시오. 그렇지 않으면 잘못된 클러스터가 추가될 수 있습니다. 예를 들어 개발, 스테이징 및 프로덕션 환경에서 각각 클러스터 이름 logging-dev , 로깅-단계 및 로깅-prod 을 사용할 수 있습니다.

노드가 하나만 있는 클러스터는 유효하고 완벽합니다. 각각 고유한 클러스터 이름을 갖는 여러 개의 독립 클러스터를 가질 수도 있습니다.

노드(Node)

노드는 클러스터의 일부로 데이터를 저장하고 클러스터의 인덱싱 및 검색에 참여하는 단일 서버입니다. 클러스터와 마찬가지로 노드도 고유한 이름으로 구별됩니다. 기본 이름은 서버가 시작될 때 노드에 설정되는 임의의 UUID(Universally Unique IDentifier)입니다. 기본값을 사용하지 않으려면 노드 이름을 사용자 정의할 수도 있습니다. 이름은 클러스터의 각 서버에 해당하는 노드를 식별하는 데 도움이 되므로 관리자에게 매우 중요합니다.

노드는 클러스터 이름을 구성하여 지정된 클러스터에 참여할 수 있습니다. 기본적으로 노드는 elasticsearch 라는 클러스터에 참여합니다. 즉, 네트워크에서 많은 수의 노드를 시작하고 모두 서로 통신할 수 있으면 자동으로 elasticsearch 클러스터라는 클러스터에 추가됩니다. .

색인(Index)

색인 은 특정 유사한 특성을 가진 문서의 모음입니다. 예를 들어 고객 데이터 색인, 제품 카탈로그 색인, 주문 데이터 색인 등이 있습니다. 인덱스는 문서를 인덱싱, 검색, 업데이트 및 삭제할 때 사용되는 이름(모두 소문자여야 함)으로 식별됩니다. 단일 클러스터 내에서 필요한 만큼 많은 인덱스를 정의할 수 있습니다.

Type

인덱스는 하나 이상의 유형을 정의할 수 있습니다. 유형은 사용자가 이해하고 싶은 인덱스의 논리적 범주/파티션입니다. 일반적으로 유형은 공통 필드 집합이 있는 문서에 대해 정의됩니다. 예를 들어, 블로깅 플랫폼은 모든 데이터를 단일 인덱스에 저장할 수 있습니다. 이 인덱스에서는 사용자 데이터 유형, 블로그 데이터 유형 및 댓글 데이터 유형을 정의할 수 있습니다.

문서

문서는 인덱스를 생성할 수 있는 기본 단위입니다. 예를 들어 문서를 사용하여 고객에 대한 데이터를 저장하거나, 단일 제품에 대한 데이터를 저장하거나, 단일 주문에 대한 데이터를 저장합니다. 문서는 JSON을 사용하여 표현됩니다. 하나의 인덱스/유형에 많은 수의 문서를 저장할 수 있습니다. 문서가 본질적으로 인덱스에 저장되지만 실제로는 인덱스의 유형에 인덱스/할당된다는 점은 주목할 가치가 있습니다.

샤드 및 복제본

인덱스는 단일 노드의 하드 디스크 용량을 초과할 수 있는 막대한 양의 데이터를 저장할 수 있습니다. 예를 들어, 인덱스는 10억 개의 문서를 저장하고 1TB의 하드 디스크 공간을 차지합니다. 단일 노드의 하드 디스크는 그렇게 많은 양의 데이터를 저장하기에는 충분하지 않을 수 있습니다. 서버의 검색 요청 처리 속도.

이 문제를 해결하기 위해 elasticsearch에서는 인덱스를 세분화하는 샤딩 기능을 제공합니다. 인덱스를 생성할 때 필요한 샤드 수를 간단히 정의할 수 있습니다. 각 샤드 자체에는 인덱스의 모든 기능이 있으며 클러스터의 모든 노드에 저장될 수 있습니다.

샤딩은 두 가지 주요 이유로 중요합니다.

  • 콘텐츠 볼륨을 수평으로 분할/확장할 수 있습니다.

  • 여러 노드의 샤딩에 작업을 병렬로 분산하여 성능을 향상시키거나 처리량.

샤드 배포 메커니즘과 해당 문서가 검색 요청으로 다시 집계되는 방식은 Elasticsearch에서 완전히 관리되며 사용자에게 투명합니다.

언제든지 장애가 발생할 수 있는 네트워크/클라우드 환경에서는 샤딩이 매우 유용할 수 있으며 샤드/노드가 오프라인 상태가 되거나 사라지는 것을 방지하기 위해 장애 조치 메커니즘을 적극 권장합니다. 이를 위해 elasticsearch 를 사용하면 소위 복제된 샤드 또는 단순히 복제본이라고 하는 인덱스 샤드의 복사본을 하나 이상 만들 수 있습니다.

복제본은 두 가지 주요 이유로 중요합니다.

  • 샤드/노드에 장애가 발생할 경우 고가용성을 제공합니다. 따라서 복사본이 복사된 원본/기본 샤드와 동일한 노드에 복제본을 할당할 수 없다는 점에 유의하는 것이 중요합니다.

  • 모든 복제본에 대해 검색을 병렬로 수행할 수 있으므로 검색 볼륨/처리량을 확장할 수 있습니다.

요약하자면, 각 인덱스는 여러 개의 샤드로 나눌 수 있습니다. 각 인덱스는 0번(복사본 없음) 또는 여러 번 복제될 수도 있습니다. 복제되면 각 인덱스에는 기본 샤드(복제된 원래 샤드)와 보조 샤드(기본 샤드의 복사본)가 있습니다. 인덱스 생성 시 인덱스별로 샤드와 레플리카의 개수를 정의할 수 있습니다. 인덱스를 생성한 후 언제든지 복제본 수를 동적으로 변경할 수 있지만 나중에 샤드 수를 변경할 수는 없습니다.

기본적으로 각 인덱스에는 5개의 기본 샤드와 1개의 복제본 샤드가 할당됩니다. 즉, 클러스터에 2개의 노드가 있는 경우 인덱스에는 5개의 기본 샤드와 5개의 복제본 샤드가 있어 총 10개의 샤드가 있습니다.

각 Elasticsearch 샤드는 Lucene 인덱스에 최대 2,147,483,519개(= Integer.MAX_VALUE - 128)개의 문서가 있을 수 있습니다. 샤드 크기를 모니터링하세요. .

Summary

1. 검색에 관계형 데이터베이스를 사용하면 어떨까요? 검색을 구현하기 위해 데이터베이스를 사용하기 때문에 성능이 매우 저하되고 단어 분할 검색을 수행할 수 없습니다.

2. 전체 텍스트 검색, 역색인, Lucene이란 무엇인가요? 이전 분들이 이미 요약하셨으니 [단계별 전체 텍스트 검색 교육]을 참고하세요. Apache Lucene 예비 탐색

3. Elasticsearch의 특징

  • 은 클러스터로 분산되어 대용량 데이터를 처리할 수 있습니다. 거의 실시간으로

  • 사용자를 위해 즉시 사용이 매우 간단합니다. 데이터의 양이 크지 않으면 작업이 크게 복잡해지지 않습니다.

  • 관계형 데이터베이스에는 없는 기능(예: 전체 텍스트 검색, 동의어 처리, 관련성 순위 지정, 복잡한 데이터 분석, 준실수)이 있습니다. -대량 데이터의 시간 처리; Lucene 기반으로 복잡성을 숨기고 간단하고 사용하기 쉬운 RESTful API 인터페이스와 Java API 인터페이스를 제공합니다.

  • 4 Elasticsearch의 핵심 개념

클러스터: 클러스터에는 여러 노드가 포함되어 있으며 각 노드가 속하는 클러스터는 구성에 따라 결정됩니다(기본값은 elasticsearch).

  • 노드: 클러스터의 노드, 노드는 자동으로 "elasticsearch"라는 클러스터에 연결됩니다. 기본. Elasticsearch 서비스는 노드입니다. 예를 들어 컴퓨터가 두 개의 es 서비스를 시작하면 두 개의 노드가 있게 됩니다.

  • 인덱스: mysql 데이터베이스에 해당하는 인덱스로 비슷한 구조의 문서 데이터가 많이 포함되어 있습니다.

  • 유형: 유형. mysql 테이블과 동일하며 인덱스의 논리적 데이터 분류입니다.

  • Document: Document는 MySQL 테이블의 레코드 행에 해당하며 ES에서 가장 작은 데이터 단위입니다.

  • 샤드: 단일 머신은 많은 양의 데이터를 저장할 수 없습니다. ES는 인덱스의 데이터를 여러 샤드로 분할하여 여러 서버에 저장할 수 있습니다.

  • replica: 복제본, 다운타임 및 샤드 손실을 방지하기 위해 최소 고가용성 구성은 서버 2대입니다.

위 내용은 엘라스틱서치란 무엇인가요? Elasticsearch는 어디에 사용될 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.