https://esbook.kimjmin.net/06-text-analysis/6.6-token-filter
토크나이저 이용해 텀을 분리한 이후에는 분리된 각각의 텀을 지정한 규칙에 따라 후처리를 진행한다. 이 과정을 ‘토큰 필터’가 담당하는데 이를 settings에 지정할때는 filter
키에 배열 값으로 전달해 사용한다. (순서가 보존된다.)
대소문자가 존재하는 알파벳은 검색시 대소문자에 상관없이 검색이 가능하도록 하는게 일반적이다.
이 역할을 하는 것이 Lowercase토큰 필터임. 거의 모든 텍스트 검색만들때 사용된다.
{
"filter": ["lowercase"],
"text": ["Harry Potter and the Philosopher's Stone"]
}
대문자가 전부 소문자로 변경되었다.
한국어 조사나 영어 전치사, 관사 등은 semantic한 의미가 없다. 예를들면 is, the, a같은 단어들. 이런 단어들은 검색어로 사용되지 않는다. 이런 단어들을 한국어로는 불용어, 영어로는 stopword라고 한다.
Stop토큰 필터를 적용하면 불용어에 해당하는 텀을 제거해버린다.
아래처럼 stopwords
필드에 불용어로 지정할 단어들을 배열로 나열하면 된다. 일반적으로는 _english_
_german_
과 같이 언어팩 단위로 불용어를 지정하기도 한다.
💡 한, 중, 일어 등은 별도의 형태소 분석기를 사용해야 한다.
불용어 목록을 별도의 텍스트 파일로 저장하고 저장된 파일 경로를
stopwords_path
항목의 값으로 지정해 사용하는 것도 가능. → 이 사전 파일의 내용이 변경된 후에 인덱스에 적용하려면 인덱스를 새로고침해줘야 한다.새로고침 하는 방법은 다음과 같다.
- POST <인덱스명>/_close
- POST<인덱스명>/_open
{
"settings": {
"analysis": {
"filter": {
"my_stop_filter": {
"type": "stop",
"stopwords": [
"in",
"the",
"days"
]
"stopwords_path": "user_dic/my_stop_dic.txt"
}
}
}
}
}
{
"tokenizer": "whitespace",
"filter": [
"lowercase",
"my_stop_filter"
],
"text": [ "Around the world in Eighty Days" ]
}
관사와 전치사 날아가고, 공백 단위로 텀이 추출되었다. days는 불용어 목록에 있어서 날아감.