ljs981026 2023. 4. 26. 17:26

analyzer: inverted index에 저장된 데이터를 만드는 것이 analyzer 

analyzer의 구성

  1. 문자열
  2. chracter filter
  3. tokenizer
  4. token filter
  5. tokens

analyzer를 통해 들어온 문자열들은 character filter가 1차로 변경하여 특수 문자들을 제거하고 html태그를 제거하는 등의 문자열을 구성하고 있는 문자들을 특정한 기준으로 변경하고, 변경된 문자열은 tokenizer를 통해 n개의 토큰으로 나뉜다. tonkenizer를 거쳐 n개의 토큰이 생성되면 이 토큰들을 token filter가 다시 한번 변형한다. analyzer를 구성할 때는 tokenizer를 필수로 명시해야 하며 하나의 tokenizer만 설정할 수 있다. 

standard tokenizer 결과

  아직 token filter를 거치지 않았기 때문에 대문자가 그대로 출력된다.

standard analyzer 결과

standard analyzer를 사용하여 token filter를 거친 후 토큰이 소문자로 변경되었다. 즉 Hello Elastic Search를 검색하기 위해서는 위에 명시된 3개의 토큰들 중 하나를 사용하여야한다.

 

analyzer와 검색

analyzer를 통해 생성된 토큰들이 inverted index에 저장되고 검색할 때는 이 inverted index에 저장된 값을 바탕으로 문서를 찾는다.

text 타입인 title을 검색해보면 아래와 같이 출력된다.
keyword 타입인 content를 검색하면 아래와 같이 출력이 되지 않는다.

차이가 발생한 이유는 타입에 따라 다른 analyzer가 사용되었기 때문이다. title필드는 text타입으로 정의했고, content 필드는 keyword 타입으로 정의했다. text 타입의 기본 analyzer는 standard analyzer이고 keyword 타입의 기본 analyzer는 keyword analyzer이다.

 

standard analyzer로 문자열 분석하기
keyword analyzer로 문자열 분석하기

standard analyzer로 분석할 경우 3개의 토큰이 생성되었지만 keyword analyzer로 분석할 경우 1개의 토큰만 생성되었다. 즉, standard analyzer는 공백을 기준으로 토크나이징 되고 keyword analyzer는 문자열 그대로 토크나이징 된다.

 

참고문헌: 기초부터 다지는 ElasticSearch 운영 노하우

http://www.yes24.com/Product/Goods/96520155