YOGAE

TODO: FIXME:

분석기

26 Feb 2019

기본 구성

분석기에는 다음과 같은 구성 요소가 있습니다.

문자필터(Character filters) -> 토크나이저(Tokenizer) -> 토큰 필터(Token filters)

문자 필터(Character filters)

각 문자 필터는 입력 필드의 문자를 추가, 삭제, 변경할 수 있습니다.

"char_filter": {
    "my_char_filter": {
        "type": "mapping",
        "mappings": [
            ":) => _smile_",
            ":( => _sad_",
            ":D => _laugh_"
        ]
    }
}

문자 필터는 분석기 과정의 맨 앞에 위치합니다. 따라서 다음에 위치한 토크나이저는 항상 대체된 문자를 얻습니다.

###토크나이저(Tokenizer)

분석기는 정확히 하나의 토크나이저를 갖고 있습니다. 토크나이저는 문자열을 받아 토큰 스트림을 생성하는 역할을 담당합니다. 해당 토큰을 역색인을 만들 때 사용합니다. 토큰은 단어와 같다고 봐도 무방합니다.

컴퓨터 과학에서 역색인, 역 인덱스(inverted index), 역 파일(inverted file)은 낱말이나 숫자와 같은 내용물로부터의 매핑 정보를 데이터베이스 파일의 특정 지점이나 문서 또는 문서 집합 안에 저장하는 색인 데이터 구조이다. 역색인의 목적은 문서가 데이터베이스에 추가될 때 늘어나는 처리를 위해 빠른 전문 검색을 가능케 하는 것이다.

표준 토크나이저

문자열을 공백 문자와 구두점을 기반으로 분해합니다.

POST _analyze
{
 	"tokenizer": "standard",
    "text": "Tokenizer breaks characters into tokens"
}
{
    "tokens": [
        {
            "token": "Tokenizer",
            "start_offset":0,
            "end_offset": 9,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "breaks",
            "start_offset":10,
            "end_offset": 16,
            "type": "<ALPHANUM>",
            "position": 1
        },
        ......
    ]
}

토큰 필터

모든 토근 필터는 수신한 입력 토큰 스트림에 있는 토큰의 추가, 삭제, 변경이 가능합니다. 분석기는 여러 토큰 필터를 가질 수 있으며, 각 토큰 필터의 결과는 모든 토큰 필터가 동작할 때까지 다음 토큰 필터로 전송됩니다.

##내장형 분석기

대부분의 내장형 분석기는 추가 구성 없이도 동작하며, 일부 매개변수를 설정하여 유연하게 사용할 수 있습니다.

  • 표준 분석기

    • 구성: 표준 토크나이저, 표준 토큰 필터, 소문자 토큰 필터, 불용어 토큰 필터

    • 생성 예시

      PUT index_standard_analyzer
      {
      	"setting": {
              "analysis": {
                  "analyzer": {
                      "std": {
                          "type": "standard",
                          # "stopwords": "_english_"
                      }
                  }
              }
      	},
      	"mappings": {
              "my_type": {
                  "properties": {
                      "my_text": {
                          "type": "text",
                          "analyzer": "std"
                      }
                  }
              }
      	}
      }
      
    • 분석한 token 확인 예시

      POST index_standard_analyzer/_analyze
      {
          "field": "my_text",
          "text": "The Standard Analzyer works this way"
      }
      
      {
          "tokens": [
              {
                  "token": "the",
                  "start_offset":0,
                  "end_offset": 3,
                  "type": "<ALPHANUM>",
                  "position": 0
              },
              {
                  "token": "standard",
                  "start_offset":4,
                  "end_offset": 12,
                  "type": "<ALPHANUM>",
                  "position": 1
              },
              ......
          ]
      }
      
  • keyword type

    keyword type을 사용하는 field는 내부적으로 키워드 분석기를 사용합니다. Keyword 분석기는 noop 토크나이저라는 keywork 토크나이저로 구성되며, 입력 전체를 토큰 하나로 반환합니다.