kok202
[2019.03.14] 엘라스틱 서치 강의 정리

2019. 3. 14. 17:33[정리] 데이터베이스/[NoSQL] ElasticSearch

강의 : https://www.youtube.com/watch?v=MQpHYcocKiY&list=PL7GFP9ynPAiQUPzheLp_f-NgAN1XUsus4&index=3

검색엔진 만들어라 != 네이버나 다음을 만들어라 아님, 네이버나 다음은 검색 서비스

검색엔진 = 데이터를 수집하고 검색 색인을 만든 과정

검색엔진의 원리 : 인덱스, 목차

검색엔진 평가방법

Precision : 가져온 문서중 실제 관련있는 문서의 비율

Recall : 전체 문서셋에 있는 관련있는 문서셋중 건져올린 문서의 비율






역인덱스

0. 문서가 들어오면  필요있는 단어만 남긴다.

텍스트가 들어온다.

 대학생선교회

 형태소 분석한다. 

 ["대학", "생선", "교회"] or ["대학생", "선교회"]

 Token이 생성된다.

 "대학생", "선교회"

 Token 에의해  Term이 결정된다.

 "대학생", "선교회"


1. 색인해낸 단어를 렉시콘 파일에 넣는다.

2. 색인한 문서 번호를 포스팅파일에 넣는다.

렉시콘 파일은 포스팅파일과 해쉬 인덱스 - 위치 관계다.






엘라스틱 서치는 클러스터가 내장되어있다. (ES 전에 나온 Solr는 Zookeeper를 사용하여 클러스터를 관리했다.)

Shard가 필요한 경우 옮기는 전략을 사용한다.

동적 설정이 변경이 가능하다. = 운행중에 변경 가능!

Shard = 데이터를 횡으로 잘라서 분산 저장하는 것 (샤드는 운영중에 갯수 변경이 불가능하다.)

Replica = 






클러스터

 여러개의 노드의 집합, 노드이름이 같아야 하나의 클러스터로 묶임

 노드

 인덱스의 집합, 보통 서버 한대를 의미

 인덱스

 = 데이터베이스, 검색 엔진의 논리적 저장단위

 타입

 = 테이블


포트 9200, 9201 : 클러스터 외부의 데이터 전송을 위한 포트

포트 9300, 9301 : 클러스터 내부의 데이터 전송을 위한 포트






Mac에서 Elastic search의 주요 설정

설정파일 위치 : /usr/local/etc/elasticsearch/elasticsearch.yml

1. 클러스터 이름 결정

# cluster.name: elasticsearch

2. master 노드 및 data 노드여부 결정

# node.master: true
# node.data: false

master node 

 data node

 

 false

 true

 이 노드는 데이터를 저장만한다.

 true

 false

 마스터인고 데이터를 저장하는 역할을 하지않는다.

 true

 true

 데이터를 전달해주는 게이트웨이 역할


3. 샤드 및 리플라카 개수 설정

# index.number_of_shards: 5

# index.number_of_replicas: 1

4. 데이터 경로 설정
5. 필수 플러그인 설정
6. 메모리 설정
7. 네트워크 바인딩 주소 설정 

8. 게이트웨이 설정

20 





POST로 데이터를 넣을시 ID 값은 알아서 들어감

그러나 ID를 지정안할시 이상한 ID 값으로 들어감 ex) 


{

  "_index" : "classes",

  "_type" : "class",

  "_id" : "1",

  "_version" : 1,

  "_seq_no" : 0,

  "_primary_term" : 1,

  "found" : true,

  "_source" : {

    "title" : "Machine Learning",

    "Professor" : "Minsuk Heo",

    "major" : "Computer Science",

    "semester" : [

      "spring",

      "fall"

    ],

    "student_count" : 100,

    "unit" : 3,

    "rating" : 5,

    "submit_date" : "2016-01-02",

    "school_location" : {

      "lat" : 36.0,

      "lon" : -120.0

    }

  }


JSON 필드 이름 앞에 _가 있는 것은 예약어다.

형태소 분석기의 구조

텍스트 -> CharFilter -> Tokenizer -> Filter -> ... -> Term 

하나의 인덱스 안에서는 Properties 이름이 같아선 안된다.