728x90
한글 유니코드의 이해
현대의 문자 표현은 모두 유니코드로 이뤄지며, 전 세계의 문자를 모두 표현하기 위한 영역 중 한글은 0x0000 ~ 0xFFFF 영역으로 표현한다.

한글 자모를 표현하는 유니코드
- Hangul Jamo와 Hangul Compatibility Jamo에 정의
- 한글 자모는 유니코드 0x1100 ~ 0x11FF까지의 범위를 가지며 총 256자로 구성된다.
- 한글 호환용 자모는 유니코드 0x3130 ~ 0x318F까지의 범위를 가지며, 총 96개의 공간 중 94자를 정의해서 구성된다.
- 현대 한글 체계에서는 초성 19자, 중성 21자, 종성 28자로 분류
한글 음절을 표현하는 유니코드
- 음절은 한글 자모에서 제공하는 초성, 중성, 종성으로 이뤄진 한글 한 글자를 표현하는 단위를 의미한다.
- 모든 글자는 Hangul Syllables에 코드로 정의되어 있다
- 한글 음절 유니코드는 0xAC00 ~ 0xD7AF까지의 범위를 가지며 11184 공간 중 11172자를 정의해서 구성
한글 자모 분석 필터

@Test
public void jamoTest1() {
String token = "자바카페";
KoreanJamoParser parser = new KoreanJamoParser();
String result = parser.parse(token);
// 기대하는 자모 분해 결과 (예시)
assertEquals("ㅈㅏㅂㅏㅋㅏㅍㅔ", result);
}
@Test
public void jamoTest2() {
String token = "성천자";
KoreanJamoParser parser = new KoreanJamoParser();
String result = parser.parse(token);
System.out.println(result);
// 기대하는 자모 분해 결과 (예시)
assertEquals("ㅅㅓㅇㅊㅓㄴㅈㅏ", result);
}
- javacafe_jamo 필터는 한글을 자모 단위로 분해해서 제공하는 분석 필터이다.
- 토크나이저에 의해 텀으로 분리된 단어를 글자수 별로 파싱해서 자모 분석을 하며, 처리할 글자가 한글 유니코드에 해당하지 않을 경우에는 분해하지 않고 무시한다.
- 필터는 글자의 한글 음절 유니코드를 확인해 이에 매칭되는 한글 자모 유니코드를 추출한다.
- 색인용 분석기로는 jamo_index_analyzer를 정의하고, 검색용 분석기로는 jamo_search_analyzer를 정의했는데, 색인 시 edgeNgram 필터가 추가되어야 하다.
- 색인할 때와 검색할 때 토큰을 분리하는 기준이 다르기 때문
- 자모 검색은 자동완성 형태의 검색에 많이 이용되기 때문에 단어가 키보드로 한 글자씩 입력되는 과정에서도 입력 순서에 따라 항상 자모 분석 결과를 제공해야 하기 때문이다.
한글 초성 분석 필터
@Test
public void chosungTest1() {
String token = "자바카페";
KoreanChosungParser parser = new KoreanChosungParser();
String result = parser.parse(token);
System.out.println(result);
// 자바카페 → 초성: ㅈ ㅂ ㅋ ㅍ
assertEquals("ㅈㅂㅋㅍ", result);
}
@Test
public void chosungTest2() {
String token = "저자";
KoreanChosungParser parser = new KoreanChosungParser();
String result = parser.parse(token);
System.out.println(result);
// 저자 → 초성: ㅈ ㅈ
assertEquals("ㅈㅈ", result);
}
- javacafe_chosung 필터는 한글을 자모 단위로 분해 후, 초성만 추출해서 제공하는 분석 필터이다.
- 색인용 분석기로 chosumg_index_analyzer를 정의, 검색용 분석기로는 chosung_search_analyzer를 정의
- 색인용 분석기에 edge_ngram_filter_front 필터를 추가해야한다.
- 마찬가지로 입력한 키에 모두 대응하기 위해 색인 시 edgeNgram을 추가적으로 적용해야 한다
영한 오타 변환 필터
@Test
public void test() {
String token = "wkakzkvp"; // 두벌식 기준 "자바카페"
EngToKorConverter convert = new EngToKorConverter();
String result = convert.convert(token);
System.out.println(result);
assertEquals("자바카페", result);
}
@Test
public void test1() {
String token = "tkatjdwjswk"; // 두벌식 기준 "삼성전자"
EngToKorConverter convert = new EngToKorConverter();
String result = convert.convert(token);
System.out.println(result);
assertEquals("삼성전자", result);
}
- javacafe_eng2kor 필터는 한영 키에 의한 영문 오타를 한글로 교정해 주는 필터다.
- 한글 키보드에 대응되는 영문 키보드 값을 정의해서 서로 변환해 주는 방식으로 구현되어 있다
한영 오타 변환 필터
@Test
public void testKorToEng() {
String token = "자바카페"; // 한글 입력
KorToEngConverter convert = new KorToEngConverter();
String result = convert.convert(token);
System.out.println(result);
// 두벌식 기준: "자바카페" → "wkakzkvp"
assertEquals("wkakzkvp", result);
}
- javacafe_kor2eng 필터는 한글 오타를 영문으로 교정해 주는 필터이다.
- 영어 키보드에 대응되는 한글 키보드 값을 정의해서 서로 변환해 주는 방식으로 구현되어 있다
스펠링 체크 필터
@Test
public void spellTest() {
String token = "자바카페";
KoreanJamoParser parser = new KoreanJamoParser();
String result = parser.parse(token);
assertEquals("ㅈㅏㅂㅏㅋㅏㅍㅔ", result);
}
- 맞춤법 검사기 내부에서 사용하는 필터이다.
- 맞춤법 검사를 위해서는 한글을 먼저 자모 형태로 분리해야 하기 때문에 이런 필터가 필요하며, javacafe_jamo 필터와 동일한 기능을 수행한다.
728x90
'Elastic Search' 카테고리의 다른 글
| Ch08. 엘라스틱서치 클라이언트 - Transport 클라이언트 (0) | 2025.10.03 |
|---|---|
| Ch08. 엘라스틱서치 클라이언트 - 엘라스틱서치 클라이언트의 이해 (0) | 2025.10.02 |
| Ch07. 한글 검색 확장 기능 - 한글 키워드 자동완성 (0) | 2025.09.28 |
| Ch07. 한글 검색 확장 기능 - 맞춤법 검사기 (0) | 2025.09.28 |
| Ch07. 한글 검색 확장 기능 - Suggest API 소개 (0) | 2025.09.28 |