ElasticSearch 개념 1탄. Elasticsearch 검색엔진 및 쿼리

4 분 소요

Elasticsearch 개념(2)

Elasticsearch의 장점은? 장점 1: 데이터를 검색에 맞게 가공하는 작업이 필요한데 Elasticsearch은 데이터를 저장하는 과정에서 이 작업을 처리합니다. 장점 2: Elasticsearch는 데이터를 실제로 검색에 사용되는 텀(Term) 으로 분석 과정을 거쳐 저장하기 때문에 검색 시 대소문자, 단수나 복수, 원형 여부와 상관 없이 검색이 가능합니다. 장점 3: Elasticsearch 는 동적 매핑을 지원하기 때문에 미리 정의하지 않아도 인덱스에 도큐먼트를 새로 추가하면 자동으로 매핑이 생성됩니다. 장점 4: Elasticsearch 는 검색엔진으로 개발되었지만 로그분석을 비롯해 다양한 목적의데이터 시스템으로 사용되고 있습니다. (여러가지 연산을 할 수 있는 Aggregation 기능이 있기 때문입니다.)

핵심요점 1) Elasticsearch가 검색을 위해 텍스트 데이터를 어떻게 처리하는지? 2) 데이터를 색인 할 때 Elasticsearch에서 어떤 과정이 이루어지는지에 대해 살펴보기

텍스트 데이터 저장시 ‘역 인덱스(inverted index)’를 사용하는 이유?

  • 역 인덱스를 통해 빠른 시간 안에 검색을 할 수 있기 때문입니다
  • 역 인덱스는 책의 맨 뒤에 있는 주요 키워드에 대한 내용이 몇 페이지에 있는지 볼 수 있도록 텀(term)과 도큐먼트들의 ID를 저장합니다.

match 쿼리가 있는데 term 쿼리는 왜 있는가? 왜 쓰이는지? term 쿼리는 입력한 검색어는 애널라이저를 적용하지 않고 입력된 검색어 그대로 일치하는 텀을 찾습니다. 따라서 jumps, jumping 으로 검색하면 결과가 나타나지 않고 jump로 검색해야 결과가 나타납니다.

텀벡터 API(_termvectors API)는 왜 쓰는 것인지? 색인된 도큐먼트의 역 인덱스의 내용을 확인하기 위해서 사용합니다.

캐릭터 필터(Character Filter)는 왜 쓰는 것인지? 텍스트 분석 중 가장 먼저 처리되는 과정으로 색인된 텍스트가 토크나이저에 의해 텀으로 분리되기 전에 전체 문장에 대해 적용되는 일종의 전처리 캐릭터 필터는 HTML Strip, Mapping, Pattern Replace 총 3개가 존재합니다. char_filter 항목에 배열로 입력하며 하나만 적용하거나 차례대로 입력해서 3개를 모두 적용할 수도 있습니다

캐릭터 필터(Character Filter) > HTML Strip은 왜 쓰는 것인지? 입력된 텍스트가 HTML 인 경우 HTML 태그들을 제거하여 일반 텍스트로 만듭니다. <>로 된 태그를 제거할 뿐 아니라   같은 HTML 문법 용어들도 해석합니다. 입력 값은 html_strip 입니다.

캐릭터 필터(Character Filter) > Pattern Replace는 왜 쓰는 것인지? 정규식(Regular Expression)을 이용해서 좀더 복잡한 패턴들을 치환할 수 있게 하기 위해서 입니다.

캐릭터 필터(Character Filter) > Mapping은 왜 쓰는 것인지?

  • 지정한 단어를 다른 단어로 치환이 가능합니다.
  • standard 뿐 아니라 대다수의 애널라이저들이 특수문자에 대해서는 불용어로 간주하고 제거 해 버리기 때문에 특수문자가 포함된 검색어들을 검색하려면 먼저 특수문자를 다른 문자로 치환해서 저장해야 합니다.
  • 특수문자 등을 포함하는 검색 기능을 구현하려는 경우 반드시 적용해야 해서 실제로 캐릭터 필터 중에는 가장 많이 쓰입니다.
  • 예를 들어, 큐먼트가 색인 될 때 standard 애널라이저가 적용되면서 C++에서 특수문자 +는 제거 되고 C는 소문자로 처리 되면서 실제로 역 인덱스는 c 가 저장됩니다.

Standard 토크나이저는 공백으로 텀을 구분하면서 “@”과 같은 일부 특수문자를 제거합니다. 보통은 Standard 토크나이저를 많이 사용합니다. Letter 토크나이저는 알파벳을 제외한 모든 공백, 숫자, 기호들을 기준으로 텀을 분리합니다. Letter 토크나이저의 경우 검색 범위가 넓어져서 원하지 않는 결과가 많이 나올 수 있습니다. Whitespace 토크나이저는 스페이스, 탭, 그리고 줄바꿈 같은 공백만을 기준으로 텀을 분리합니다. Whitespace의 경우 특수문자를 거르지 않기 때문에 정확하게 검색을 하지 않으면 검색 결과가 나오지 않을 수 있습니다.

UAX URL Email 왜 있는건지? Standard 토크나이저를 사용하면 이메일 주소등이 정상적으로 인식되지 않아 문제가 될 수 있는데 Standard 토크나이저도 @, / 같은 특수문자는 공백과 마찬가지로 제거하고 분리합니다.

UAX URL Email 핵심 기능은? UAX URL Email 토크나이저는 이메일 주소와 웹 URL 경로는 분리하지 않고 그대로 하나의 텀으로 저장을 합니다.

Pattern 토크나이저를 쓰는 이유는? 특수한 문자를 구분자로 사용하여 텀을 분리하고 싶은 경우 사용하기 위해서 입니다.

Path Hierarchy 토크나이저를 쓰는 이유는? Path Hierarchy 토크나이저를 사용하면 경로 데이터를 계층별로 저장해서 하위 디렉토리에 속한 도큐먼트들을 수준별로 검색하거나 집계하는 것이 가능합니다.

토큰 필터(Token Filter)의 역할은? 토크나이저를 이용한 텀 분리 과정 이후에는 분리된 각각의 텀 들을 지정한 규칙에 따라 처리를 해 주는데 이 과정을 담당하게 됩니다.

Stop 토큰 필터는 왜 쓰는 것인지? Stop 토큰 필터를 적용하면 불용어에 해당되는 텀 들을 제거합니다.

Synonym은 왜 쓰는 것인지? 검색 서비스에 따라서 동의어 검색을 제공해야할 때 쓰입니다.

NGram을 왜 쓰는 것인지? Edge NGram을 왜 쓰는 것인지? NGram과 Edge NGram은 모두 하나의 단어로부터 토큰을 확장하는 토큰 필터입니다.

Shingle을 왜 쓰는 것인지? 문자가 아니라 단어 단위로 구성된 묶음을 Shingle 이라고 합니다.

Unique 토큰 필터를 왜 쓰는 것인지? unique 토큰 필터를 사용해서 중복되는 텀 들은 하나만 저장하도록 할 수 있습니다.

형태소 분석이라는 것은? 텍스트 데이터를 분석할 때 각각의 텀에 있는 단어들을 기본 형태인 어간을 추출하는 과정을 진행해야 합니다. 이 과정을 보통 어간 추출 또는 형태소 분석이라고 합니다. Elasticsearch에서 사용 가능한 형태소 분석기 중에서 가장 많이 알려진 형태소 분석 알고리즘인 Snowball과 한글 형태소 분석기인 Nori가 있습니다.

Snowball 형태소 분석기의 쓰임은? 보통 ~ing, ~s 등을 제거하여 문장에 쓰인 단어들을 기본 형태로 변경합니다.

Nori 형태소 분석기의 쓰임은? Elasticsearch 6.6 버전 부터 공식적으로 Nori(노리) 라고 하는 한글 형태소 분석기를 Elastic사에서 공식적으로 개발해서 지원을 하기 시작했습니다. nori_readingform 토큰 필터는 한자로 된 단어를 한글로 바꾸어 저장을 합니다.

Kibana의 장점은? Kibana 에서는 바 차트, 파이 차트 등으로 데이터를 시각화 할 수 있는데 여기서 사용하는 것이 Elasticsearch의 Aggregation 기능입니다.

metrics aggregation과 bucket aggregation의 차이점은? Aggregation 종류들 중 숫자 또는 날짜 필드의 값을 가지고 계산을 하는 aggregation 들을 metrics aggregation 이라고 분류 범위나 keyword 값 등을 가지고 도큐먼트들을 그룹화 하는 aggregation 들을 bucket aggregation 이라고 분류

Pipeline Aggregations의 쓰임은? Aggregation 중에는 다른 metrics aggregation의 결과를 새로운 입력으로 하는 pipeline aggregation이 있습니다.

Aggregations의 핵심 기능은? 데이터 분석 엔진으로서의 기능을 가능하게 합니다.

[참고자료] Elastic 가이드북 https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88

카테고리:

업데이트:

댓글남기기