Elasticsearch 연구 노트 (1) ES 전체 소개 및 설치 사례

목차

ES 소개

ES는 무엇입니까?

ES의 발전 역사

엘라 틱 스택

ES 인기

ES의 특징

ES 애플리케이션 시나리오

ES 아키텍처

ES 아키텍처 소개

ES의 핵심 개념

RDBMS 비교

ES 학습 리소스

설치 및 구성

ES 설치 패키지

JAVA 요구 사항

Linux에서의 설치 예

Linux 가상 머신에서 실행할 때 가능한 오류

ES 포트 설명

백그라운드에서 ES 실행

ES 닫기

창에서 시작

ES 소프트웨어 카탈로그 설명

ES 구성 지침

구성 파일 분리

yml 형식 설명

ES 중요 구성 매개 변수

데이터 디렉토리와 로그 디렉토리는 생성 환경에서 소프트웨어와 분리되어야합니다.

속한 클러스터의 이름입니다. 기본값은 사용자 정의 할 수있는 elasticsearch입니다.

노드 이름, 기본값은 UUID의 처음 7 자이며 사용자 정의 할 수 있습니다.

network.host IP 바인딩

http.port : 9200-9300  

transport.tcp.port : 9300-9400  

Discovery Config 노드 검색 구성

Jvm 힙 크기 설정

JVM 힙 덤프 경로 설정

安装 Kibana

설치 패키지 다운로드

설치

구성

시작

통합 Ikanalyzer

IKAnalyzer 중국어 단어 분할 통합

ES-IKAnalyzer 플러그인 받기

플러그인 설치

확장 된 동의어 사전

IK 테스트


ES 소개

ES는 무엇입니까?

  • Elasticsearch는 전체 텍스트 검색 엔진 라이브러리 Apache Lucene을 기반으로하는 오픈 소스 검색 엔진입니다.
  • Java로 작성되었으며 인덱싱 및 검색을 위해 내부적으로 Lucene을 사용하지만 그 목적은 Lucene의 복잡성을 숨기고 대신 간단하고 일관된 RESTful API 세트를 제공하여 전체 텍스트 검색을 단순하게 만드는 것입니다.
  • Elasticsearch는 단순한 전체 텍스트 검색 엔진 그 이상입니다. 다음과 같이 정확하게 설명 할 수 있습니다.
    • 분산 된 실시간 문서 저장소, 각 필드를 색인화하고 검색 할 수 있습니다.
    • 분산 실시간 분석 검색 엔진
    • 수백 개의 서비스 노드 확장에 적합하며 PB 수준의 정형 또는 비정형 데이터 지원

ES의 발전 역사

  • Elasticsearch는 나중에 회사 (Elastic 회사)로 운영되어 데이터 검색 및 분석 플랫폼 으로 포지셔닝했습니다 . 2014 년 6 월 자금 조달액은 7000 만 달러, 누적 자금 조달액은 1 억 달러를 초과했습니다. ES는 이제 Java, Ruby, Python, PHP, Perl, .NET 등과 같은 여러 클라이언트와 통합 할 수 있습니다. 또한 매우 강력한 기능으로 Hadoop 및 Spark와 같은 빅 데이터 분석 플랫폼과 통합 될 수 있습니다.
  • Elasticsearch를 기반으로 일련의 오픈 소스 소프트웨어가 파생되었으며 총칭하여 Elastic Stack 이라고합니다 (다음 페이지 참조).
  • 버전 혼동을 피하기 위해 5.0부터 Elastic은 각 구성 요소의 버전 번호를 통합했습니다. 사용할 때 각 구성 요소의 버전 번호가 일치해야합니다 (버전 번호 형식 : xyz, z는 다를 수 있음).
  • Elasticsearch의 최신 버전은 2018 년 4 월 17 일에 릴리스 된 6.2.4입니다.

엘라 틱 스택

  • Elasticsearch 분산 검색 엔진
  • Logstash 로그 수집 및 분석 도구
  • Kibana 시각적 분석 플랫폼
  • Beats 데이터 수집 도구 제품군 (Logstash 교체)
  • X-Pack 기능 팩 

ES 인기

DB-Engine의 검색 엔진 순위 (데이터베이스 관리 시스템 정보를 수집 및 통계하는 기관, 홈페이지 : https://db-engines.com/en/ranking/search+engine)

데이터베이스로 사용되는 순위도 좋습니다.

ES의 특징

공식 웹 사이트에서 소개를 참조하십시오 : https://www.elastic.co/cn/products/elasticsearch

빠르고, 확장하기 쉬우 며, 유연하고, 유연하고, 작동하기 쉬우 며, 다국어 클라이언트, X-Pack, hadoop / spark, 강력한 협력, 즉시 사용 가능합니다.

  • 분산 : 수평 확장은 매우 유연합니다.
  • 전체 텍스트 검색 : Lucene을 기반으로 한 강력한 전체 텍스트 검색 기능;
  • 거의 실시간 검색 및 분석 : 데이터가 ES에 입력되고 거의 실시간 검색이 가능하며 집계 및 분석도 가능합니다.
  • 고 가용성 : 내결함성 메커니즘, 신규 또는 장애 노드 자동 검색, 데이터 재구성 및 재조정
  • 자유 모드 : ES의 동적 매핑 메커니즘은 데이터의 구조와 유형을 자동으로 감지하고 인덱스를 생성하며 데이터를 검색 가능하게 만듭니다.
  • RESTful API : JSON + HTTP

ES 애플리케이션 시나리오

  • 사이트 검색
  • NoSQL 데이터베이스
  • 로그 분석
  • 데이터 분석

ES 아키텍처

ES 아키텍처 소개

  • 게이트웨이는 ES에서 색인을 저장하고 여러 유형을 지원하기 위해 사용하는 파일 시스템입니다.
  • 게이트웨이의 상위 계층은 분산 형 lucene 프레임 워크입니다.
  • Lucene 위에는 인덱스 모듈, 검색 모듈, 매핑 분석 모듈 등을 포함한 ES 모듈이 있습니다.
  • ES 모듈 위에는 Discovery, Scripting 및 타사 플러그인이 있습니다. 검색은 ES의 노드 검색 모듈입니다. 클러스터를 형성하려면 서로 다른 시스템의 ES 노드가 메시지 통신을 수행해야하며 클러스터 내에서 마스터 노드를 선택해야합니다. 이러한 작업은 모두 검색 모듈에서 수행됩니다. Zen, EC2, gce, Azure와 같은 여러 검색 메커니즘을 지원합니다. 스크립팅은 쿼리 문에 javascript, python 및 기타 스크립팅 언어의 삽입을 지원하는 데 사용됩니다. 스크립팅 모듈은 이러한 스크립트의 구문 분석을 담당하며 스크립트 문 사용 성능은 약간 낮습니다. ES는 또한 다양한 타사 플러그인을 지원합니다.
  • 상위 계층은 ES 전송 모듈과 JMX이며 전송 모듈은 Thrift, memecached, http, http와 같은 다중 전송 프로토콜을 기본적으로 사용합니다. JMX는 ES 애플리케이션을 관리하는 데 사용되는 Java 관리 프레임 워크입니다.
  • 최상위 계층은 ES가 사용자에게 제공하는 인터페이스로 RESTful 인터페이스를 통해 ES 클러스터와 상호 작용할 수 있습니다.

ES의 핵심 개념

  • NRT (근 실시간) 거의 실시간. 데이터가 색인에 제출되면 즉시 검색 할 수 있습니다.
  • 클러스터 cluster , 클러스터는 고유 한 이름으로 식별되며 기본값은 "elasticsearch"입니다. 클러스터 이름은 매우 중요하며 동일한 클러스터 이름을 가진 노드 만 클러스터를 형성합니다. 클러스터 이름은 구성 파일에서 지정할 수 있습니다.
  • 노드 노드 : 클러스터의 데이터를 저장하고 클러스터의 인덱스 및 검색 기능에 참여합니다. 클러스터에 이름이있는 것처럼 노드에도 자체 이름이 있습니다. 기본적으로 임의 UUID의 처음 7 개 문자가 시작시 노드 이름으로 사용됩니다. 임의의 이름을 지정할 수 있습니다. 클러스터를 형성하기 위해 클러스터 이름을 통해 네트워크에서 피어를 발견하십시오. 노드는 클러스터가 될 수도 있습니다.
  • 색인 색인 : 색인은 문서 모음입니다 (Solr의 모음과 동일). 각 인덱스에는 고유 한 이름이 있으며이 이름으로 작동합니다. 클러스터에는 여러 인덱스가있을 수 있습니다.
  • 유형 : 사용자 데이터 및 블로그 데이터와 같은 다양한 유형의 문서를 색인에서 색인화 할 수 있음을 의미합니다. 버전 6.0.0부터 사용되지 않으며 한 가지 유형의 데이터 만 인덱스에 저장됩니다.
  • 문서 : 색인화 할 데이터 조각, 색인의 기본 정보 단위로 JSON 형식으로 표현됩니다.
  • 샤드 샤드 : 인덱스를 생성 할 때 스토리지를 위해 분할 할 샤드 수를 지정할 수 있습니다. 또한 각 샤드 자체는 완전히 기능하고 독립적 인 "인덱스"이며 클러스터의 모든 노드에 배치 할 수 있습니다. 샤딩의 이점 :
    • 인덱스를 생성 할 때 수평 분할 / 확장 용량      세그먼트의 수를 지정할 수 있으며 생성 후에는 변경할 수 없습니다. 백업 수는 언제든지 변경할 수 있습니다.
    • 분산 및 병렬 작업을 여러 샤드에서 수행하여 시스템 성능과 처리량을 개선 할 수 있습니다.
  • 복제 백업 : 조각에는 여러 백업 (복제본)이있을 수 있습니다. 백업의 이점 :
    • 고 가용성      기본 샤드, 복제본 샤드
    • 동시성 및 검색 처리량을 확장합니다. 검색은 모든 사본에서 병렬로 실행할 수 있습니다.

색인이 동사로 사용되는 경우 색인화 데이터 또는 색인화 데이터를 나타냅니다.

RDBMS 비교

 

 

RDBMS

Elasticsearch

데이터 베이스

인덱스

유형 (6.0.0 폐기 됨)

문서

기둥

테이블 구조 (스키마)

매핑

인덱스

반전 인덱스

SQL

DSL 쿼리

SELECT * FROM 테이블

http : // .... 가져 오기

테이블 세트 업데이트

PUT http : // ....

지우다

http : // ... 삭제

ES 학습 리소스

  • 공식 웹 사이트의 문서는 상세하고 포괄적 인 최고의 학습 자료입니다. 공식 웹 사이트는 또한 몇 가지 비디오를 제공합니다 : https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
  • 공식 웹 사이트는 또한 중국어로 된 권위있는 가이드를 제공합니다. (이 버전은 조금 더 오래되었습니다) : https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

설치 및 구성

ES 설치 패키지

공식 웹 사이트 다운로드 주소 : https://www.elastic.co/downloads/elasticsearch

JAVA 요구 사항

자바 버전 : 1.8

Linux에서의 설치 예

1. 설치 패키지 얻기

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz

2. 설치 디렉토리에 압축을 풉니 다.

tar -xvf elasticsearch-6.2.4.tar.gz -C / opt

3. 구성

4. 시작

cd /opt/elasticsearch-6.2.4/bin

./elasticsearch

Linux 가상 머신에서 실행할 때 가능한 오류

1. 메모리가 부족합니다. 기본 es 구성은 1G 힙 메모리를 사용합니다. 사용하는 가상 머신에 그렇게 큰 메모리가없는 경우 config / jvm.options에서 조정하십시오.

2. 다음 오류가보고 될 수 있습니다.

해결책:

问题一:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决:修改切换到root用户修改配置limits.conf 添加下面两行
命令:vi /etc/security/limits.conf
*        hard    nofile           65536
*        soft    nofile           65536

问题二:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf 
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048

问题三:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf 
添加下面配置:
vm.max_map_count=655360

并执行命令:
sysctl -p

切换到es的用户。
然后,重新启动elasticsearch,即可启动成功。

ES 포트 설명

1. 외부 서비스 용 9200 http 포트

2. 노드 간 통신을위한 9300 tcp 포트

백그라운드에서 ES 실행

./elasticsearch -d

ES 닫기

백그라운드에서 실행되지 않음 : ctrl + c

백그라운드에서 실행 : kill es process

창에서 시작

elasticsearch .bat

ES 소프트웨어 카탈로그 설명

ES 구성 지침

구성 파일 분리

yml 형식 설명

ES 중요 구성 매개 변수

데이터 디렉토리와 로그 디렉토리는 생성 환경에서 소프트웨어와 분리되어야합니다.

속한 클러스터의 이름입니다. 기본값은 사용자 정의 할 수있는 elasticsearch입니다.

노드 이름, 기본값은 UUID의 처음 7 자이며 사용자 정의 할 수 있습니다.

network.host IP 바인딩

http.port : 9200-9300  

transport.tcp.port : 9300-9400  

Discovery Config 노드 검색 구성

ES에서 채택 된 기본 노드 검색 방법은 zen입니다 (멀티 캐스트 (멀티 캐스트), 유니 캐스트 기반). 프로덕션에 사용하기 전에 구성해야하는 두 가지 중요한 매개 변수가 있습니다.

  • discovery.zen.ping.unicast.hosts : [ "host1", "host2 : port", "host3 [portX-portY]"] 유니 캐스트 모드에서 마스터 자격이있는 노드 목록을 설정하면 새로 추가 된 노드가 이 목록 클러스터에 참여하기 위해 요청을 보내는 노드입니다.
  • discovery.zen.minimum_master_nodes : 1이 매개 변수는 노드가 클러스터에서 작동하기 전에 마스터 자격으로 확인해야하는 최소 노드 수를 제어합니다. 공식 권장 값은 (N / 2) +1이며, 여기서 N은 마스터 인증 노드의 수입니다.
  • transport.tcp.compress : false tcp가 전송 한 데이터 압축 여부, 기본값은 false
  • http.cors.enabled : true http 프로토콜을 사용하여 외부 서비스를 제공할지 여부, 기본값은 true입니다.
  • http.max_content_length : 100mb http 전송 콘텐츠의 최대 용량, 기본값은 100mb
  • node.master : true 노드를 마스터 노드로 사용할 수 있는지 여부를 지정합니다. 기본값은 true입니다. ES 클러스터는 기본적으로 첫 번째 노드를 마스터로 사용합니다. 노드가 실패하면 마스터가 다시 선택됩니다.
  • node.data : true 노드가 인덱스 데이터를 저장하는지 여부에 따라 기본값은 true입니다.
  • discover.zen.ping.timeout : 3s 클러스터에서 다른 노드가 자동으로 발견 될 때 ping 연결 제한 시간을 설정합니다. 기본값은 3 초입니다. 네트워크 환경이 열악한 경우이 값을 늘리면 노드가 응답을 기다리는 시간이 늘어나서 오판이 어느 정도 줄어 듭니다.
  • discovery.zen.ping.multicast.enabled : false 노드를 검색하기 위해 멀티 캐스트를 활성화할지 여부입니다.

Jvm 힙 크기 설정

프로덕션 환경에서는 jvm.options에서 jvm 메모리를 늘려야합니다.

JVM 힙 덤프 경로 설정

문제점을 분석하기 위해 프로덕션 환경에서 OOM 예외가 발생할 때 힙의 덤프 경로를 지정하십시오. jvm.options에서 구성하십시오.

-XX:HeapDumpPath=/var/lib/elasticsearch

중요한 운영 체제 구성도 있습니다. https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html을 참조하십시오.

安装 Kibana

Kibana는 ES 용 시각적 관리 도구입니다.

설치 패키지 다운로드

https://www.elastic.co/downloads/kibana

설치

설치 디렉토리에 압축을 풉니 다.

구성

config / kibana.yml의 elasticsearch.url 값을 ES의 액세스 주소로 구성하십시오.

시작

./bin/kibana

통합 Ikanalyzer

IKAnalyzer 중국어 단어 분할 통합

ES-IKAnalyzer 플러그인 받기

주소 : https://github.com/medcl/elasticsearch-analysis-ik/releases

플러그인 설치

ES 설치 디렉토리의 plugins / 디렉토리에 ik 패키지의 압축을 푼 다음 (다른 플러그인을 설치할 때 동일한 이름과의 충돌을 방지하기 위해 추출 된 디렉토리의 이름을 변경하는 것이 좋습니다), ES를 다시 시작하십시오.

확장 된 동의어 사전

구성 파일 config / IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
 	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">location</entry>
 	<!--用户可以在这里配置远程扩展停止词字典-->
	<entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry>
</properties>

IK 테스트

1. 색인 생성

curl -XPUT http : // localhost : 9200 / index

2. 매핑 만들기

curl -XPOST http : // localhost : 9200 / index / fulltext / _mapping -H 'Content-Type : application / json'-d '

{  

      "속성": {      

           "content": {          

                "type": "텍스트",        

                 "분석기": "ik_max_word",

                "search_analyzer": "ik_max_word"  

          }  

      }

} '

3. 일부 문서 색인

curl -XPOST http : // localhost : 9200 / index / fulltext / 1 -H'Content-Type : application / json '-d'{ "content": "미국이 이라크를 떠나는 것은 엉망입니까?"} '

curl -XPOST http : // localhost : 9200 / index / fulltext / 2 -H'Content-Type : application / json '-d'{ "content": "공공 안보부 : 모든 학교 버스는 최고의 권리를 누릴 수 있습니다. 도로"}'

curl -XPOST http : // localhost : 9200 / index / fulltext / 3 -H'Content-Type : application / json '-d'{ "content": "중한 어부 경찰 분쟁 조사 : 한국 경찰은 1 척당 1 척을 구금 중국 어선 평균 하루 "} '

4. 검색 해보세요

curl -XPOST http : // localhost : 9200 / index / fulltext / _search -H 'Content-Type : application / json'-d '

{  

  "query": { "match": { "content": "中国"}},  

  "highlight": {      

       "pre_tags": [ "<tag1>", "<tag2>"],      

       "post_tags": [ "</ tag1>", "</ tag2>"],    

       "fields": { "content": {}}

    }

} '

추천

출처blog.csdn.net/qq_34050399/article/details/112639226