2025. 9. 11. 16:29ㆍBig Data
es에서 anayzer는 아래와 같은 형태로 구성이 된다.

analyzer를 구성하는데 있어서 Char Filter와 Token Filter는 없어도 무방하지만 Tokenizer는 반드시 설정이 되어야 한다.
Char Filter는 사용자 query가 들어오면 해당 query에서 전처리하는 역할을 한다.
Tokenizer는 Char Filter에서 전처리된 결과를 Tokenizer 알고리즘에 맞게 Tokenizing을 하는 역할을 한다.
아래와 같은 tokenizer 들이 있다.
| standard | es에서 제공하는 기본 tokenizer. 텍스트 기반으로 tokenizing한다. |
| lowercase | 모든 문자를 소문자로 변환하며, 텍스트 기반으로 tokenizing한다. |
| ngram | n개의 연속된 단어 모음으로 tokenizing한다. |
| uax_url_email | url 혹은 email을 tokenzing하는 데 특화되어 있다. |
마지막으로 Token Filter는 Tokenizer에 의해 Token화 된 결과들을 filter 하는 역할을 하며 주로 아래와 같은 filter가 있다.
| lowercase | 각 token들을 모두 소문자로 변환한다. |
| uppercase | 각 token들을 모두 대문자로 변환한다. |
| stemmer | 각 token들을 모두 어원 형태로 변환한다. 영문에만 적용이 된다. |
| stop | 많이 등장하지만 의미 없는 token들 (a, the)을 제거한다. |
이제 analyzer를 호출해보자. rest api로 손쉽게 호출이 가능하다.
$> curl -X POST "localhost:9200/_analyze" -H 'Content-Type : application/json' -d'
{
"analyzer" : "stop",
"text" : "i am a boy"
}
char filter와 token filter도 함께 호출해 볼 수 있다.
$> curl -X POST "localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"char_filter" : [""],
"analyzer" : "standard",
"filter" : ["lowercase", "stop"],
"text" : "i am a boy"
}
위의 예제에서는 char_filter는 따로 사용하지 않았고, tokenizer는 standard를 사용했으며, token filter는 lowercase filter와 stop filter를 사용했다. 순서는 char_filter -> standard analyzer -> lowercase filter -> stop filter 순서로 거치게 된다.
해당 filter의 순서가 중요한데 filter가 ["lowercase", "stop"]으로 지정되어 있고 stop filter에 lion이라는 단어가 들어 있고, text에 "I am a Lion"이라고 들어 왔을 경우에, 결과 token은 i, am 이 될 것이다.
그럼 이번에는 filter가 ["stop", "lowercase"]로 지정되어 있다면 어떻게 될까? 결과 token은 i, am, lion이 될 것이다.
이처럼 filter의 순서가 결과에 영향을 끼친다는 걸 유념하자
마지막으로 내가 원하는 analyzer를 직접 구성해 볼 수도 있다. 아래의 예를 참고하자. 아래의 예제는 index 생성 시에 setting 항목에 나만의 custom analyzer를 추가한 예제이다.
{
"settings" : {
"analysis" : {
"filter" : {
"custom_stopword" : {
"type" : "stop",
"stopwords" : ["lion"]
}
},
"analyzer" : {
"custom_analyzer" : {
"type" : "custom",
"char_filter" : [],
"tokenizer" : "standard",
"filter" : ["lowercase", "custom_stopword"]
}
}
}
}
}
anaylzer 항목에 내가 만들 analyzer 이름을 지정하고, type을 custom으로 지정하면 custom analyzer를 구성할 수가 있다. token filter에서도 내가 만든 filter를 적용할 수가 있는데, analysis 항목의 filter에서 내가 만들 filter명을 기입하고, type과 그에 맞는 값을 넣어주면 된다. 예제에서는 stop filter에 lion이란 단어를 추가함으로써 나만의 stop filter를 구성하였다.
해당 custom analyzer와 custom filter는 setting이 추가된 index에서만 사용이 가능하다.