IT/Elasticsearch

synonyms token filter 에서 lenient란??

준나이 2018. 11. 8. 10:01

lenient를 한국말로하면 관대한이라는 뜻이다. 무엇이 관대한지 알아보자.


lenient의 default값은 false이고, true일 경우 관대해져서 동의어 필터를 적용하며 생기는 exception들을 모두 무시한다. 동의어 필터를 적용하며 생기는 문제는 다음과 같다.

curl -X PUT "localhost:9200/test_index" -H 'Content-Type: application/json' -d'
{
"settings": {
"index" : {
"analysis" : {
"analyzer" : {
"synonym" : {
"tokenizer" : "standard",
"filter" : ["my_stop", "synonym"]
}
},
"filter" : {
"my_stop": {
"type" : "stop",
"stopwords": ["bar"]
},
"synonym" : {
"type" : "synonym",
"lenient": true,
"synonyms" : ["foo, bar => baz"]
}
}
}
}
}
}
'
위를 보면 동의어 사전에 "foo, bar => baz"와 같이 등록했지만 "bar"는 stopword이므로 생략되는데 "foo => baz" 형태로 mapping 된다. 그러나 동의어 사전에 등록한 형태가 "foo, baz => bar" 였다면 최종 변화되느 형태인 "bar"가 사라지게 되므로 동의어 filter를 거치고 나면 남는것은 아무것도 없게 된다. 이와 유사하게, "bar, foo, baz" 형태로 동의사전이 저장되어있고 expand=false로 되있으면 아무것도 남지 않는다. 하지만 expand 값이 true라면 "foo, baz => foo, baz"과 같은 매핑 효과를 가지게 된다.



어느정도까지 무시하는지는 추후에 좀 더 테스트 필요