커스텀 분석기

원본 보기

커스텀 분석기

내장 분석기가 요구 사항을 충족하지 못하는 경우, 다음 요소를 적절히 조합한 custom 분석기를 만들 수 있습니다.

custom 분석기는 다음 매개변수를 받습니다.

type
분석기 타입. 내장 분석기 타입을 받습니다. 커스텀 분석기의 경우 custom을 사용하거나 이 매개변수를 생략합니다.
tokenizer
내장 또는 커스터마이즈된 토크나이저. (필수)
char_filter
내장 또는 커스터마이즈된 문자 필터의 선택적 배열.
filter
내장 또는 커스터마이즈된 토큰 필터의 선택적 배열.
position_increment_gap
텍스트 값의 배열을 색인할 때, Elasticsearch는 구문 쿼리가 서로 다른 배열 요소의 두 용어에 매칭되지 않도록 한 값의 마지막 용어와 다음 값의 첫 용어 사이에 가상의 "간격"을 삽입합니다. 기본값은 100입니다. 자세한 내용은 position_increment_gap을 참조하세요.

다음은 아래 요소를 조합한 예제입니다.

문자 필터
토크나이저
토큰 필터
				PUT my-index-000001
					{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}
				POST my-index-000001/_analyze
					{
  "analyzer": "my_custom_analyzer",
  "text": "Is this <b>déjà vu</b>?"
}
		
  1. custom 분석기에는 typecustom으로 지정하거나 type 매개변수를 생략합니다.

위 예제는 다음 용어를 생성합니다.

[ is, this, deja, vu ]
		

앞의 예제는 토크나이저, 토큰 필터, 문자 필터를 기본 설정 그대로 사용했지만, 각각을 설정한 버전을 만들어 커스텀 분석기에서 사용할 수도 있습니다.

다음은 아래 요소를 조합한 좀 더 복잡한 예제입니다.

문자 필터
토크나이저
토큰 필터

예제는 다음과 같습니다.

				PUT my-index-000001
					{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "char_filter": [
            "emoticons"
          ],
          "tokenizer": "punctuation",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "tokenizer": {
        "punctuation": {
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
        "emoticons": {
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
        "english_stop": {
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}
				POST my-index-000001/_analyze
					{
  "analyzer": "my_custom_analyzer",
  "text": "I'm a :) person, and you?"
}
		
  1. 인덱스에 기본 커스텀 분석기 my_custom_analyzer를 지정합니다. 이 분석기는 요청 뒷부분에서 정의하는 커스텀 토크나이저, 문자 필터, 토큰 필터를 사용합니다. 또한 이 분석기는 type 매개변수를 생략합니다.
  2. 커스텀 punctuation 토크나이저를 정의합니다.
  3. 커스텀 emoticons 문자 필터를 정의합니다.
  4. 커스텀 english_stop 토큰 필터를 정의합니다.

위 예제는 다음 용어를 생성합니다.

[ i'm, _happy_, person, you ]