1. ElasticSearch 정보
ElasticSearch 란?
- 독립 네트워크에있는 하나 또는 그룹의 프로세스 노드는 독립적으로 배포 가능한 애플리케이션 인 미들웨어로 이해 될 수 있습니다.
- 외부 검색 서비스 (http 또는 전송 프로토콜) 제공
- 내부적으로는 검색 데이터베이스입니다.
명사 정의
- Index = 데이터베이스
- Type = table, 유형 정의는 es7에서 점차 폐지됩니다.
- 문서 = 행 데이터
- 관계형 데이터베이스와 ES 명사의 비교 다이어그램 :
관계형 데이터베이스 |
ElasticSearch |
데이터 베이스 |
인덱스 |
표 |
유형 |
열 |
문서 |
기둥 |
들 |
개요 |
매핑 |
인덱스 |
모든 것이 색인화됩니다. |
SQL |
DSL 쿼리 |
SELECT * FROM Table… |
http : //… 받기 |
테이블 세트 업데이트 |
PUT http : //… |
인덱스
- 검색의 데이터베이스 또는 테이블 정의
- 문서 작성시 색인 생성
분사
- 검색은 단어 측면에서 가장 기본적인 검색 단위입니다.
- 토크 나이저를 사용하여 단어 세분화 구축
- 단어 분할을 사용하여 반전 된 인덱스 작성
검색 엔진 처리 다이어그램
![검색 엔진 처리 다이어그램](https://img-blog.csdnimg.cn/2020111515311965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MjIxNzg4,size_16,color_FFFFFF,t_70#)
반전 인덱스
- 앞으로 인덱스 : 모든 문서를 순회하고 각 문서 아래의 모든 필드를 순회하여 대상 레코드인지 여부를 확인합니다.
![앞으로 인덱스 다이어그램](https://img-blog.csdnimg.cn/20201115153713654.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MjIxNzg4,size_16,color_FFFFFF,t_70#)
- 역 색인 : 단어 측면에서 단어를 포함하는 모든 문서를 단어에 따라 찾을 수 있으므로 모든 문서를 순회 할 필요는 없지만 모든 단어를 순회하면됩니다.
![역 인덱스 다이어그램](https://img-blog.csdnimg.cn/20201115153642402.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MjIxNzg4,size_16,color_FFFFFF,t_70#)
TF-IDF 점수
- 특정 단어를 기반으로 여러 문서를 검색한다고 상상해보십시오. 어느 것이 더 일치하는 것이 좋습니까? 이때 채점 논리가 필요합니다.
- TF : 단어 빈도,이 문서에 포함 된 단어 수, 더 많이 포함할수록 관련성이 높아집니다.
- DF : 문서 빈도, 단어가 포함 된 총 문서 수
- IDF : DF는 역수를 취합니다.
- 점수 매기기에 일반적으로 사용되는 계산 공식 : TF * IDF
둘째, ElasticSearch 설치
ElasticSearch
Kibana
세, 분산 원리
분열
- 샤딩은 인덱스를 기반으로합니다. 인덱스가 반전 된 인덱스와 문서 구조라고 가정합니다. 인덱스와 문서의 수가 시스템 디스크의 상한선을 초과하면 샤딩 프로세스가 필요합니다. 기본 인덱스 생성은 샤드 슬라이스를 할당하는 것입니다. , 모든 문서가이 슬라이스에서 색인화됩니다.
주인 노예
라우팅
- 기본 및 보조 샤드는 라우팅 정보가 필요합니다.
- numbers_of_shards : 쓰기 작업에 응답하는 데 사용되는 기본 샤드의 수를 정의합니다 (읽기에도 응답).
- numbers_of_replicas : 읽기 작업에 응답하는 데 사용되는 인덱스 백업 조각의 수를 정의합니다.
- 읽기 요청은 마스터 노드를 거치지 않고 슬레이브 노드에서 직접 발생할 수 있으며 해당 노드에 조각화가없는 경우 조각화가있는 노드로 라우팅됩니다.
예를 들면
PUT /test
{
"settings": {
"numbers_of_shards": 1,
"numbers_of_replicas": 0
}
}
클러스터 구축
- 3 개의 노드 시작
- 구성 파일 수정 : config / elasticsearch.yml
cluster.name: dianping-app
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]
cluster.initail_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]