캐릭터 필터는 텍스트 분석 중 가장 먼저 처리되는 과정으로 색인된 텍스트가 토크나이저를 만나기 전에 전체 문장에 대해 적용되는 전처리 도구이다.

HTML Strip

입력된 문서가 HTML일 경우 HTML 태그들을 제거해 일반 텍스트로 만든다.   같은 이스케이프 문자도 제거함.

{
  "tokenizer": "keyword",
  "char_filter": [
    "html_strip"
  ],
  "text": "<p>I&apos;m so <b>happy</b>!</p>"
}

이렇게 요청하면

image.png

태그들이 제거되고 token화 된다.

Mapping

캐릭터 필터를 이용하면 지정한 단어를 다른 단어로 치환할 수 있다.

특수 문자등을 포함하는 검색 기능을 구현할때 반드시 적용해야 하기 때문에 가장 많이 쓰이는 필터임.

https://esbook.kimjmin.net/06-text-analysis/6.4-character-filter/6.4.2-mapping

다음의 예제를 보자.

POST coding/_bulk
{"index":{"_id":"1"}}
{"language":"Java"}
{"index":{"_id":"2"}}
{"language":"C"}
{"index":{"_id":"3"}}
{"language":"C++"}

이후 아래의 쿼리를 날리면

{
  "query": {
    "match": {
      "language": "C++"
    }
  }
}

image.png

이렇게 C와 C++ 둘다 검색된다. 왜냐하면 도큐먼트가 색인될때 srandard 애널라이저가 C++에서 문자 +를 제거하고, C는 소문자로 처리하면서 역인덱스는 c가 되었기 때문