본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 29. · 21 Views
텍스트 분석과 애널라이저 완벽 가이드
Elasticsearch에서 텍스트 검색의 핵심인 텍스트 분석과 애널라이저의 동작 원리를 알아봅니다. Character Filter부터 Tokenizer, Token Filter까지 분석 파이프라인의 각 구성요소를 실무 예제와 함께 쉽게 설명합니다.
목차
1. 텍스트 분석 파이프라인
김개발 씨는 쇼핑몰 검색 기능을 개발하던 중 이상한 현상을 발견했습니다. "삼성 갤럭시"로 검색하면 결과가 나오는데, "삼성갤럭시"로 검색하면 아무것도 나오지 않는 것입니다.
분명 같은 상품인데 왜 이런 일이 벌어지는 걸까요?
텍스트 분석 파이프라인은 사용자가 입력한 텍스트를 검색 가능한 형태로 변환하는 일련의 과정입니다. 마치 도서관 사서가 새 책이 들어오면 분류하고, 라벨을 붙이고, 목록에 등록하는 것과 같습니다.
이 과정을 제대로 이해하면 왜 검색 결과가 예상과 다르게 나오는지 알 수 있습니다.
다음 코드를 살펴봅시다.
// Elasticsearch 텍스트 분석 파이프라인 흐름
// 원본 텍스트: "The Quick Brown FOX!"
// 1단계: Character Filter - 문자 수준 전처리
// "<b>Hello</b>" → "Hello" (HTML 태그 제거)
// 2단계: Tokenizer - 토큰으로 분리
// "The Quick Brown FOX" → ["The", "Quick", "Brown", "FOX"]
// 3단계: Token Filter - 토큰 후처리
// ["The", "Quick", "Brown", "FOX"]
// → ["the", "quick", "brown", "fox"] (소문자 변환)
// → ["quick", "brown", "fox"] (불용어 제거)
// 최종 색인: ["quick", "brown", "fox"]
김개발 씨는 입사 6개월 차 백엔드 개발자입니다. 오늘도 열심히 검색 기능을 테스트하던 중, 고객 문의가 들어왔습니다.
"삼성 갤럭시로 검색하면 나오는데, 삼성갤럭시로 검색하면 왜 안 나와요?" 황당한 마음에 직접 테스트해보니 정말 그랬습니다. 띄어쓰기 하나 차이로 검색 결과가 완전히 달라지다니요.
선배 개발자 박시니어 씨에게 도움을 요청했습니다. "이건 텍스트 분석을 이해해야 해요.
Elasticsearch가 텍스트를 어떻게 처리하는지 알면 답이 보일 거예요." 그렇다면 텍스트 분석이란 정확히 무엇일까요? 쉽게 비유하자면, 텍스트 분석은 마치 도서관에서 새 책을 등록하는 과정과 같습니다.
새 책이 들어오면 사서는 먼저 책 표지의 비닐을 벗기고, 제목과 저자를 확인하고, 분류 번호를 붙이고, 도서 목록에 등록합니다. 이렇게 정리해두어야 나중에 누군가 책을 찾을 때 빠르게 찾아줄 수 있습니다.
Elasticsearch도 마찬가지입니다. 문서가 들어오면 바로 저장하는 것이 아니라, 검색하기 좋은 형태로 가공하는 과정을 거칩니다.
이 과정이 바로 텍스트 분석 파이프라인입니다. 파이프라인은 세 단계로 구성됩니다.
첫 번째는 Character Filter로, 문자 수준에서 전처리를 수행합니다. HTML 태그를 제거하거나 특수문자를 변환하는 작업이 여기서 일어납니다.
두 번째는 Tokenizer입니다. 이 단계에서 텍스트를 의미 있는 단위인 토큰으로 분리합니다.
보통 공백이나 구두점을 기준으로 나누지만, 언어에 따라 다른 방식을 사용하기도 합니다. 세 번째는 Token Filter입니다.
분리된 토큰들을 후처리하는 단계입니다. 소문자로 변환하거나, 불필요한 단어를 제거하거나, 동의어를 추가하는 등의 작업이 여기서 이루어집니다.
김개발 씨의 문제로 돌아가 봅시다. "삼성 갤럭시"는 공백이 있어서 ["삼성", "갤럭시"] 두 개의 토큰으로 분리됩니다.
반면 "삼성갤럭시"는 공백이 없어서 ["삼성갤럭시"] 하나의 토큰이 됩니다. 색인된 문서에는 "삼성"과 "갤럭시"가 따로 저장되어 있으니, 붙여 쓴 검색어로는 찾을 수 없었던 것입니다.
박시니어 씨가 덧붙였습니다. "이런 문제를 해결하려면 한글에 맞는 분석기를 사용하거나, ngram 같은 기법을 활용해야 해요." 이처럼 텍스트 분석 파이프라인을 이해하면 검색 품질을 크게 향상시킬 수 있습니다.
실전 팁
💡 - 색인할 때와 검색할 때 동일한 분석기를 사용해야 일관된 결과를 얻습니다
- 분석 결과가 예상과 다르면 _analyze API로 직접 확인해보세요
2. Analyzer 구조
박시니어 씨의 조언을 들은 김개발 씨는 분석기에 대해 더 알고 싶어졌습니다. 그런데 공식 문서를 읽어보니 standard, simple, whitespace 등 다양한 분석기가 있었습니다.
이것들은 대체 어떻게 다른 걸까요?
Analyzer는 텍스트 분석 파이프라인을 하나로 묶어놓은 패키지입니다. 마치 요리 레시피처럼 어떤 Character Filter를 쓰고, 어떤 Tokenizer를 쓰고, 어떤 Token Filter를 적용할지 정해놓은 것입니다.
Elasticsearch는 여러 내장 분석기를 제공하며, 필요에 따라 커스텀 분석기를 만들 수도 있습니다.
다음 코드를 살펴봅시다.
// 인덱스 설정에서 커스텀 Analyzer 정의
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"char_filter": ["html_strip"],
"tokenizer": "standard",
"filter": ["lowercase", "stop", "snowball"]
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "my_custom_analyzer"
}
}
}
}
김개발 씨는 분석기의 구조를 이해하기 위해 노트에 그림을 그려보기로 했습니다. 박시니어 씨가 옆에서 도와주었습니다.
"분석기를 커피 머신이라고 생각해봐요. 원두를 넣으면 커피가 나오잖아요?
그 과정에서 원두를 갈고, 물을 통과시키고, 필터로 찌꺼기를 걸러내죠." Analyzer도 마찬가지입니다. 텍스트라는 원재료를 넣으면, 세 가지 구성요소가 순서대로 처리하여 검색 가능한 토큰들을 만들어냅니다.
첫 번째 구성요소는 Character Filter입니다. 0개 이상 사용할 수 있으며, 텍스트를 문자 수준에서 전처리합니다.
HTML 태그 제거나 특수문자 치환 같은 작업을 담당합니다. 두 번째는 Tokenizer입니다.
반드시 하나만 지정해야 합니다. 텍스트를 토큰이라는 단위로 쪼개는 핵심적인 역할을 합니다.
어떤 Tokenizer를 선택하느냐에 따라 분석 결과가 크게 달라집니다. 세 번째는 Token Filter입니다.
0개 이상 사용할 수 있으며, 지정한 순서대로 적용됩니다. 토큰을 변형하거나 추가, 삭제하는 작업을 수행합니다.
Elasticsearch는 즉시 사용할 수 있는 내장 분석기를 제공합니다. 가장 많이 쓰이는 standard 분석기는 Unicode 텍스트 분할 알고리즘을 사용하여 대부분의 언어에서 잘 동작합니다.
simple 분석기는 알파벳이 아닌 문자를 기준으로 토큰을 분리하고 소문자로 변환합니다. whitespace 분석기는 공백만을 기준으로 분리하며 다른 처리는 하지 않습니다.
하지만 내장 분석기가 모든 상황에 맞지는 않습니다. 한국어처럼 공백으로 단어가 명확히 구분되지 않는 언어나, 특수한 비즈니스 요구사항이 있는 경우에는 커스텀 분석기를 만들어야 합니다.
위의 코드 예제를 살펴보겠습니다. my_custom_analyzer라는 이름의 커스텀 분석기를 정의했습니다.
html_strip Character Filter로 HTML 태그를 제거하고, standard Tokenizer로 토큰을 분리한 다음, lowercase, stop, snowball Token Filter를 순서대로 적용합니다. mappings에서 content 필드에 이 커스텀 분석기를 지정했습니다.
이제 content 필드에 저장되는 모든 텍스트는 이 분석기를 통해 처리됩니다. 김개발 씨가 물었습니다.
"그러면 검색할 때도 같은 분석기가 적용되나요?" "맞아요. 기본적으로 색인할 때 사용한 분석기가 검색할 때도 적용돼요.
하지만 search_analyzer를 별도로 지정하면 다른 분석기를 사용할 수도 있어요."
실전 팁
💡 - standard 분석기가 기본값이며 대부분의 경우 잘 동작합니다
- 한국어, 중국어, 일본어는 전용 분석기(nori, smartcn, kuromoji)를 사용하세요
3. Character Filter
분석기의 전체 구조를 이해한 김개발 씨는 이제 각 구성요소를 자세히 알아보기로 했습니다. 첫 번째로 살펴볼 것은 Character Filter입니다.
웹에서 크롤링한 데이터에 HTML 태그가 잔뜩 섞여 있어서 검색이 제대로 되지 않는 문제가 있었기 때문입니다.
Character Filter는 텍스트가 Tokenizer에 전달되기 전에 문자 수준에서 전처리를 수행합니다. 마치 요리하기 전에 재료를 씻고 다듬는 것과 같습니다.
HTML 태그 제거, 특정 문자 치환, 패턴 기반 변환 등의 작업을 담당합니다.
다음 코드를 살펴봅시다.
// Character Filter 설정 예제
PUT /my_index
{
"settings": {
"analysis": {
"char_filter": {
"emoticons_filter": {
"type": "mapping",
"mappings": [
":) => _happy_",
":( => _sad_",
":D => _laugh_"
]
}
},
"analyzer": {
"emoticon_analyzer": {
"type": "custom",
"char_filter": ["html_strip", "emoticons_filter"],
"tokenizer": "standard",
"filter": ["lowercase"]
}
}
}
}
}
// 입력: "<p>Hello :) World</p>"
// 출력 토큰: ["hello", "_happy_", "world"]
박시니어 씨가 화이트보드에 그림을 그리며 설명을 시작했습니다. "분석 파이프라인에서 가장 먼저 실행되는 게 Character Filter예요.
이름 그대로 문자 하나하나를 다루는 필터죠." 김개발 씨가 고개를 끄덕였습니다. "그러니까 토큰으로 나누기 전에 텍스트를 깨끗하게 정리하는 거네요?" "정확해요.
재료 손질이라고 생각하면 돼요. 양파 껍질을 벗기고, 시든 잎을 떼어내는 것처럼요." Elasticsearch는 세 가지 내장 Character Filter를 제공합니다.
첫 번째는 html_strip입니다. HTML 태그를 제거하고 HTML 엔티티를 디코딩합니다.
예를 들어 <p>Hello & World</p>는 Hello & World가 됩니다. 웹에서 수집한 데이터를 다룰 때 필수적입니다.
두 번째는 mapping입니다. 지정한 문자열을 다른 문자열로 치환합니다.
위의 코드 예제처럼 이모티콘을 텍스트로 변환하거나, 약어를 풀어쓰는 데 활용할 수 있습니다. 세 번째는 pattern_replace입니다.
정규표현식을 사용하여 패턴에 맞는 부분을 치환합니다. 복잡한 변환 규칙이 필요할 때 유용합니다.
김개발 씨가 질문했습니다. "그런데 Character Filter를 여러 개 쓰면 어떻게 되나요?" "순서대로 적용돼요.
첫 번째 필터의 출력이 두 번째 필터의 입력이 되는 식이죠. 그래서 순서가 중요해요." 코드 예제를 다시 살펴보겠습니다.
emoticon_analyzer에서 char_filter 배열에 html_strip과 emoticons_filter를 지정했습니다. 먼저 html_strip이 HTML 태그를 제거하고, 그 다음 emoticons_filter가 이모티콘을 변환합니다.
입력 텍스트 <p>Hello :) World</p>는 html_strip을 거쳐 Hello :) World가 되고, emoticons_filter를 거쳐 Hello _happy_ World가 됩니다. 그 후 standard Tokenizer가 공백으로 분리하고, lowercase 필터가 소문자로 변환하여 최종적으로 ["hello", "happy", "world"] 토큰이 생성됩니다.
실무에서 Character Filter는 데이터 정제에 매우 유용합니다. 특히 사용자 입력을 받는 검색 시스템에서 특수문자나 이모티콘 처리에 활용됩니다.
하지만 주의할 점도 있습니다. Character Filter는 원본 텍스트의 위치 정보에 영향을 줍니다.
하이라이팅 기능을 사용할 때 위치가 어긋날 수 있으니 테스트가 필요합니다.
실전 팁
💡 - html_strip은 웹 크롤링 데이터에 필수적으로 사용하세요
- mapping 필터로 도메인 특화 약어나 기호를 처리할 수 있습니다
4. Tokenizer 종류
Character Filter로 텍스트를 정제한 후에는 Tokenizer가 등장합니다. 김개발 씨는 한국어 검색 품질이 좋지 않아 고민하던 중, Tokenizer 선택이 핵심이라는 것을 알게 되었습니다.
Tokenizer는 정제된 텍스트를 의미 있는 단위인 토큰으로 분리하는 핵심 구성요소입니다. 마치 문장을 단어 카드로 나누는 것과 같습니다.
어떤 Tokenizer를 선택하느냐에 따라 검색 결과의 품질이 크게 달라집니다.
다음 코드를 살펴봅시다.
// 다양한 Tokenizer 비교
// 입력 텍스트: "Hello-World, How are you?"
// 1. standard tokenizer - 표준 단어 분리
// 결과: ["Hello", "World", "How", "are", "you"]
// 2. whitespace tokenizer - 공백만 기준
// 결과: ["Hello-World,", "How", "are", "you?"]
// 3. keyword tokenizer - 전체를 하나의 토큰으로
// 결과: ["Hello-World, How are you?"]
// 4. ngram tokenizer 설정
PUT /ngram_index
{
"settings": {
"analysis": {
"tokenizer": {
"my_ngram": {
"type": "ngram",
"min_gram": 2,
"max_gram": 3
}
}
}
}
}
// "abc" → ["ab", "abc", "bc"]
"Tokenizer는 분석기의 심장이에요." 박시니어 씨가 말했습니다. "Character Filter와 Token Filter는 선택사항이지만, Tokenizer는 반드시 하나가 있어야 해요." 김개발 씨가 물었습니다.
"그렇게 중요하다면, 어떤 Tokenizer들이 있나요?" Elasticsearch는 다양한 내장 Tokenizer를 제공합니다. 가장 많이 사용되는 standard Tokenizer는 Unicode Text Segmentation 알고리즘을 기반으로 합니다.
공백과 구두점을 기준으로 토큰을 분리하면서도, 언어별 특성을 어느 정도 고려합니다. 대부분의 경우 이것으로 충분합니다.
whitespace Tokenizer는 이름 그대로 공백만을 기준으로 분리합니다. 구두점이나 하이픈은 제거하지 않습니다.
위의 예제에서 "Hello-World,"가 하나의 토큰으로 남는 것을 볼 수 있습니다. keyword Tokenizer는 입력 전체를 하나의 토큰으로 취급합니다.
토큰화를 하지 않는 것과 같습니다. 주로 이메일 주소, URL, 상품 코드 등 분리하면 안 되는 값에 사용합니다.
ngram Tokenizer는 조금 특별합니다. 텍스트를 n개의 연속된 문자 조합으로 분리합니다.
예를 들어 "abc"를 min_gram=2, max_gram=3으로 처리하면 ["ab", "abc", "bc"]가 됩니다. 김개발 씨의 눈이 반짝였습니다.
"아! 그러면 ngram을 쓰면 '삼성갤럭시'로 검색해도 '삼성 갤럭시'를 찾을 수 있겠네요?" "맞아요!
하지만 ngram은 토큰 수가 기하급수적으로 늘어나서 인덱스 크기가 커지고 검색 속도가 느려질 수 있어요. 신중하게 사용해야 해요." edge_ngram Tokenizer도 있습니다.
ngram과 비슷하지만 항상 토큰의 시작부터 n-gram을 만듭니다. 자동완성 기능에 많이 사용됩니다.
"quick"을 edge_ngram으로 처리하면 ["q", "qu", "qui", "quic", "quick"]이 됩니다. 한국어, 중국어, 일본어 같은 아시아 언어는 공백으로 단어가 명확히 구분되지 않습니다.
이런 언어에는 전용 Tokenizer가 필요합니다. 한국어는 nori Tokenizer, 일본어는 kuromoji, 중국어는 smartcn이나 ik를 사용합니다.
김개발 씨가 노트에 적으며 물었습니다. "그러면 한국어 검색에는 nori를 쓰면 되는 거네요?" "네, nori는 한국어 형태소 분석기예요.
'먹었습니다'를 '먹다'로 분석해주죠. 한국어 검색 품질을 높이려면 필수입니다."
실전 팁
💡 - 일반적인 텍스트에는 standard Tokenizer가 무난합니다
- 자동완성에는 edge_ngram, 부분 검색에는 ngram을 고려하세요
- 한국어는 nori 플러그인을 설치하여 사용하세요
5. Token Filter
Tokenizer가 만들어낸 토큰들을 최종적으로 다듬는 것이 Token Filter의 역할입니다. 김개발 씨는 "Running"과 "run"을 같은 의미로 검색되게 하고 싶었는데, Token Filter가 그 해답이었습니다.
Token Filter는 Tokenizer가 생성한 토큰들을 후처리하는 구성요소입니다. 마치 다이아몬드 원석을 가공하여 보석으로 만드는 것과 같습니다.
소문자 변환, 어간 추출, 동의어 처리, 불용어 제거 등 다양한 변환을 수행합니다.
다음 코드를 살펴봅시다.
// Token Filter 설정 예제
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"my_synonyms": {
"type": "synonym",
"synonyms": [
"quick,fast,speedy",
"big,large,huge"
]
},
"my_stop": {
"type": "stop",
"stopwords": ["the", "a", "an", "is", "are"]
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "my_stop", "my_synonyms", "snowball"]
}
}
}
}
}
// 입력: "The Quick Fox is Running"
// 출력: ["quick", "fast", "speedy", "fox", "run"]
박시니어 씨가 커피를 마시며 설명을 이어갔습니다. "Token Filter는 토큰을 다듬는 마지막 단계예요.
여러 개를 체인처럼 연결해서 사용할 수 있죠." Token Filter는 토큰을 변형하거나, 삭제하거나, 새로 추가할 수 있습니다. 가장 많이 사용되는 필터들을 살펴보겠습니다.
lowercase 필터는 모든 토큰을 소문자로 변환합니다. "Hello"와 "hello"가 같은 토큰이 되어 대소문자 구분 없이 검색할 수 있습니다.
거의 모든 분석기에서 사용되는 기본 필터입니다. stop 필터는 불용어를 제거합니다.
"the", "a", "is" 같은 단어는 검색에 별 도움이 되지 않으면서 인덱스 크기만 늘립니다. 이런 단어들을 제거하면 검색 효율이 높아집니다.
synonym 필터는 동의어를 처리합니다. "quick", "fast", "speedy"를 동의어로 등록하면, "quick"으로 검색해도 "fast"가 포함된 문서를 찾을 수 있습니다.
검색 recall을 높이는 데 매우 효과적입니다. 김개발 씨가 물었습니다.
"그런데 '동의어' 필터가 어떻게 동작하는 거예요? 하나의 토큰이 여러 개가 되나요?" "맞아요.
synonym 필터는 토큰을 확장해요. 코드 예제를 보면 'quick' 토큰이 들어오면 'quick', 'fast', 'speedy' 세 개의 토큰이 같은 위치에 생성돼요." stemmer와 snowball 필터는 어간 추출을 수행합니다.
"running", "runs", "ran"을 모두 "run"으로 변환합니다. 영어에서는 매우 효과적이지만, 한국어에는 형태소 분석기가 더 적합합니다.
ngram과 edge_ngram Token Filter도 있습니다. Tokenizer와 비슷하지만 이미 만들어진 토큰에 적용됩니다.
필터의 순서가 중요합니다. 위의 예제에서 lowercase가 먼저 적용되고, 그 다음 stop, synonym, snowball 순으로 적용됩니다.
만약 순서가 바뀌면 결과가 달라질 수 있습니다. 예를 들어 stop 필터를 lowercase 전에 적용하면 "The"와 "the"를 다른 단어로 취급하여 대문자 "The"가 제거되지 않을 수 있습니다.
"입력 텍스트의 흐름을 따라가면서 각 필터가 어떤 변화를 만드는지 상상해보세요." 박시니어 씨가 조언했습니다. 입력 "The Quick Fox is Running"은 먼저 standard Tokenizer를 통해 ["The", "Quick", "Fox", "is", "Running"]이 됩니다.
lowercase를 거치면 ["the", "quick", "fox", "is", "running"]이 되고, stop 필터로 ["quick", "fox", "running"]이 됩니다. synonym 필터로 ["quick", "fast", "speedy", "fox", "running"]이 되고, 마지막 snowball로 ["quick", "fast", "speedy", "fox", "run"]이 됩니다.
실전 팁
💡 - lowercase는 거의 항상 사용하며, 가장 먼저 적용하세요
- synonym 필터는 검색 시에만 적용하는 것이 일반적입니다
- 필터 순서를 변경하면 결과가 달라지니 주의하세요
6. analyze API로 테스트
이론은 배웠지만, 실제로 분석기가 어떻게 동작하는지 눈으로 확인하고 싶었습니다. 김개발 씨는 _analyze API를 통해 분석 결과를 직접 테스트할 수 있다는 것을 알게 되었습니다.
_analyze API는 텍스트가 어떻게 분석되는지 확인할 수 있는 디버깅 도구입니다. 마치 레시피대로 요리하기 전에 재료가 어떻게 손질되는지 미리 보는 것과 같습니다.
개발 중에 분석 결과를 확인하고 튜닝하는 데 필수적인 API입니다.
다음 코드를 살펴봅시다.
// 1. 내장 분석기 테스트
GET /_analyze
{
"analyzer": "standard",
"text": "The Quick Brown Fox!"
}
// 결과: ["the", "quick", "brown", "fox"]
// 2. 인덱스의 분석기 테스트
GET /my_index/_analyze
{
"analyzer": "my_custom_analyzer",
"text": "Hello World"
}
// 3. 필드 기준 테스트
GET /my_index/_analyze
{
"field": "content",
"text": "텍스트 분석 테스트"
}
// 4. 구성요소 개별 테스트
GET /_analyze
{
"tokenizer": "standard",
"filter": ["lowercase", "stop"],
"text": "The Quick Brown Fox!"
}
// 결과: ["quick", "brown", "fox"]
"백문이 불여일견이죠." 박시니어 씨가 터미널을 열며 말했습니다. "직접 테스트해보면 이해가 훨씬 빨라요." _analyze API는 Elasticsearch에서 가장 유용한 디버깅 도구 중 하나입니다.
분석기가 텍스트를 어떻게 처리하는지 즉시 확인할 수 있습니다. 가장 간단한 사용법은 내장 분석기를 테스트하는 것입니다.
첫 번째 코드 예제처럼 analyzer에 "standard"를, text에 분석할 텍스트를 지정하면 됩니다. 결과로 생성된 토큰들의 배열이 반환됩니다.
실제 응답에는 더 자세한 정보가 포함됩니다. 각 토큰의 시작 위치, 끝 위치, 타입, 그리고 position 정보까지 확인할 수 있습니다.
하이라이팅이나 구문 검색에서 이 정보들이 사용됩니다. 인덱스에 정의된 커스텀 분석기를 테스트할 수도 있습니다.
두 번째 예제처럼 엔드포인트에 인덱스 이름을 포함하고, 해당 인덱스의 분석기 이름을 지정합니다. 더 편리한 방법은 필드를 기준으로 테스트하는 것입니다.
세 번째 예제처럼 field에 필드명을 지정하면, 그 필드에 설정된 분석기로 텍스트를 분석합니다. 어떤 분석기가 적용되는지 몰라도 괜찮습니다.
김개발 씨가 감탄했습니다. "이렇게 하면 색인할 때랑 검색할 때 어떤 토큰이 생성되는지 바로 알 수 있겠네요!" "맞아요.
검색 결과가 예상과 다를 때 이 API로 확인하면 원인을 빠르게 찾을 수 있어요." 네 번째 예제는 더 세밀한 테스트 방법입니다. tokenizer와 filter를 개별적으로 지정할 수 있습니다.
분석기를 구성하기 전에 각 구성요소가 어떻게 동작하는지 미리 확인하는 데 유용합니다. Character Filter도 테스트할 수 있습니다.
char_filter 파라미터를 추가하면 됩니다. "하나 팁을 드릴게요." 박시니어 씨가 말했습니다.
"explain 파라미터를 true로 설정하면 각 단계에서 어떤 변화가 일어났는지 상세하게 볼 수 있어요." GET /_analyze { "analyzer": "standard", "text": "The Quick Brown Fox!", "explain": true } 이 옵션을 사용하면 각 필터가 토큰을 어떻게 변형했는지 단계별로 추적할 수 있습니다. 디버깅할 때 매우 유용합니다.
김개발 씨는 터미널에서 여러 가지 텍스트를 테스트해보며 분석 결과를 확인했습니다. "삼성 갤럭시"와 "삼성갤럭시"가 standard 분석기에서 어떻게 다르게 처리되는지, nori 분석기를 사용하면 어떻게 달라지는지 직접 눈으로 확인할 수 있었습니다.
"이제 검색 품질을 개선할 때 어디서부터 시작해야 할지 알겠어요!" 김개발 씨가 환하게 웃었습니다.
실전 팁
💡 - 검색 결과가 이상할 때 _analyze API로 먼저 확인하세요
- explain: true 옵션으로 각 단계의 변화를 추적할 수 있습니다
- 색인 분석기와 검색 분석기가 다른 경우 둘 다 테스트해보세요
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
관찰 가능한 마이크로서비스 완벽 가이드
마이크로서비스 환경에서 시스템의 상태를 실시간으로 관찰하고 모니터링하는 방법을 배웁니다. Resilience4j, Zipkin, Prometheus, Grafana, EFK 스택을 활용하여 안정적이고 관찰 가능한 시스템을 구축하는 실전 가이드입니다.
EFK 스택 로깅 완벽 가이드
마이크로서비스 환경에서 로그를 효과적으로 수집하고 분석하는 EFK 스택(Elasticsearch, Fluentd, Kibana)의 핵심 개념과 실전 활용법을 초급 개발자도 쉽게 이해할 수 있도록 정리한 가이드입니다.
Prometheus 메트릭 수집 완벽 가이드
Spring Boot 애플리케이션의 메트릭을 Prometheus로 수집하고 모니터링하는 방법을 배웁니다. Actuator 설정부터 PromQL 쿼리까지 실무에 필요한 모든 내용을 다룹니다.
스프링 관찰 가능성 완벽 가이드
Spring Boot 3.x의 Observation API를 활용한 애플리케이션 모니터링과 추적 방법을 초급 개발자 눈높이에서 쉽게 설명합니다. 실무에서 바로 적용할 수 있는 메트릭 수집과 분산 추적 기법을 다룹니다.
Zipkin으로 추적 시각화 완벽 가이드
마이크로서비스 환경에서 분산 추적을 시각화하는 Zipkin의 핵심 개념과 활용 방법을 초급자도 쉽게 이해할 수 있도록 실무 스토리로 풀어낸 가이드입니다. Docker 실행부터 UI 분석까지 단계별로 배웁니다.