# kibana 에서 로그 조회시 my_log:[ysoftman] 로 질의하면
# [ysoftman] 외 ysoftman 도 조회된다.
# \[ 로 이스케이프해도 동일하다.
# elasticsearch(es) 는 토큰을 생성할때 상황에 맞는 tokenizer(토크나이저)를 선택할 수 있다.
# 디폴트 standard 토크나이저는 공백과 특수문자를 모두 제거한다.
# es 에 다음과 같이 테스트하면 [] @ <> / 는 모두 제거 후 토큰을 분리한다.
# 따라서 ysoftman 처럼 [] 가 없는 토큰이 생성되어 검색시 [] 는 무시된다.
curl -X GET "http://ysoftman.es.test:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
"tokenizer" : "standard",
"text" : "[ysoftman] 123@aac.com this is test... <b>test</b>"
}
# whitespace 토크나이저의 경우 특수문자 제거 없이 공백으로만 토큰을 분리한다.
# 따라서 [ysoftman] 이 자체가 토큰이 된다.
curl -X GET "http://ysoftman.es.test:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
"tokenizer" : "whitespace",
"text" : "[ysoftman] 123@aac.com this is test... <b>test</b>"
}
# [] 와 같은 특수 문자까지 구분해서 조회하기 위해서는 whitespace 토크나이저를 사용해야 한다.
# 테스트
# whitespace 토크나이저를 사용하는 ysoftman-test-001 인덱스 생성
curl -X PUT "http://ysoftman.es.test:9200/ysoftman-test-001" -H 'Content-Type: application/json' -d'
{
"settings": {
"analysis": {
"analyzer": {
"ysoftman_tokenizer": {
"tokenizer": "whitespace"
}
}
}
},
"mappings": {
"properties": {
"my_log": {
"type": "text",
"analyzer": "ysoftman_tokenizer"
}
}
}
}
'
# 인덱스 생성 확인
curl "http://ysoftman.es.test:9200/ysoftman-test*"
# 설정한 토크나이저가 동작하는지 확인해 보자.
# explain = true 로 설정하면 사용된 토크나이저 정보가 응답에 추가된다.
curl -X GET "http://ysoftman.es.test:9200/ysoftman-test-001/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
"explain": true,
"field": "my_log",
"text" : "[ysoftman] lemon @apple @juice, 12 - 999"
}'
# 이제 ysoftman 와 [ysoftman] 데이터를 추가한다.
curl -X POST "http://ysoftman.es.test:9200/ysoftman-test-001/_doc/1" -H 'Content-Type: application/json' -d'
{
"my_log" : "[ysoftman] lemon @juice, 100"
}
'
curl -X POST "http://ysoftman.es.test:9200/ysoftman-test-001/_doc/2" -H 'Content-Type: application/json' -d'
{
"my_log" : "ysoftman apple @juice, 200"
}
'
# 이제 [ysoftman] 만 조회된다.
curl -X GET "http://ysoftman.es.test:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"text": "[ysoftman]"
}
}
}
'
# kibana -> index pattern -> ysoftman-test* 인덱스 생성
# *ysoftman* 로 조회시 [ysoftman] , ysoftman 모두 조회
# [ysoftman] 로 조회시 [ysoftman] 만 조회
# ysoftman 로 조회시 ysoftman 만 조회
# 결론
# 특수문자까지 구분하는 exact matching 을 할경우 whitespace 를 사용하면 되지만
# 한글자만 틀려도 조회되지 않아 필요시에만 사용하는게 좋다.
# 테스트 종료 후 인덱스 삭제
curl -X DELETE "http://ysoftman.es.test:9200/ysoftman-test-001"
# 참고