티스토리 뷰

_analyze API
Term 쿼리
사용자 정의 애널라이저 - Custom Analyzer
텀 벡터 - _termvectors API

 


PUT my_index3
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_custom_analyzer": {
            "type": "custom",
            "tokenizer": "whitespace",
            "filter": [
              "lowercase",
              "stop",
              "snowball"
            ]
          }
        }
      }
    }
  }
}

위 analyzer 를 사용할때는 아래와 같이 사용합니다.

GET my_index3/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": [
    "The quick brown fox jumps over the lazy dog"
  ]
}
사용자 정의 토큰필터
토크나이저, 토큰필터의 경우에도 옵션을 지정하는 경우에는 사용자 정의 토크나이저, 토큰필터로 만들어 추가해야 합니다. 다음은 stop 토큰필터에 "brown"을 불용어로 적용한 my_stop_filter 사용자 정의 토큰필터를 생성하고 이것을 my_custom_analyzer에서 사용하도록 설정 한 예제입니다.
 
아래 명령 실행 전에 기존 my_index3 인덱스는 먼저 삭제해야 합니다.
 
PUT my_index3
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_custom_analyzer": {
            "type": "custom",
            "tokenizer": "whitespace",
            "filter": [
              "lowercase",
              "my_stop_filter",
              "snowball"
            ]
          }
        },
        "filter": {
          "my_stop_filter": {
            "type": "stop",
            "stopwords": [
              "brown"
            ]
          }
        }
      }
    }
  }
}

 

매핑에 사용자 정의 애널라이저 적용
애널라이저를 실제 인덱스에 입력할 데이터에 적용하려면 settings 부분에서 만든 애널라이저를 mappings 의 text 필드별로 지정합니다. 앞에서 만든 my_custom_analyzermessage 필드에 적용하는 방법은 다음과 같습니다. setting 부분은 위 예제와 동일합니다.
 
PUT my_index3
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_custom_analyzer": {
            "type": "custom",
            "tokenizer": "whitespace",
            "filter": [
              "lowercase",
              "my_stop_filter",
              "snowball"
            ]
          }
        },
        "filter": {
          "my_stop_filter": {
            "type": "stop",
            "stopwords": [
              "brown"
            ]
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "message": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  }
}

값 저장

PUT my_index3/_doc/1
{
  "message": "The quick brown fox jumps over the lazy dog"
}

검색

GET my_index3/_search
{
  "query": {
    "match": {
      "message": "brown"
    }
  }
}

다른 검색 방법

GET my_index3/_termvectors/1?fields=message

# 아래와 같은 데이터를 넣었을때
PUT my_index3/_doc/1
{
  "message": "The quick brown fox jumps over the lazy dog"
}

#Response
~~
   "terms" : {
      "dog" : {
         "term_freq" : 1,
         "tokens" : [
           {
             "position" : 8,
             "start_offset" : 40,
             "end_offset" : 43
           }
         ]
       }
       ... 
       
position 은 0 부터 시작해서 dog 부분은 0 1 2 3 4 5 6 7 8 즉 8 번째
start_offset 은 byte 단위(1 2 3 4 .... )로 쪼개서 40번째 부터 end_offset 43 을 뜻합니다.
즉, dog 입니다.

참고

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함