Elasticsearch (ELK)/Elasticsearch
8-3. 멀티 필드 - Multi Field
Velody
2020. 5. 29. 10:58
설정
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"nori_analyzer": {
"tokenizer": "nori_tokenizer"
}
}
}
},
"mappings": {
"properties": {
"message": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english"
},
"nori": {
"type": "text",
"analyzer": "nori_analyzer"
}
}
}
}
}
}
위와 같이 매핑을 정의하면 도큐먼트에는 message 필드값만 있어도 message, message.english, message.nori 총 3개의 역 색인이 생성됩니다. 위의 인덱스에 { "message": "My favorite 슈퍼영웅 is Iron Man" } 이라는 값을 입력하면 다음과 같이 3개의 역 색인이 생성됩니다.
message.english 에는 "favorite" 가 형태소 분석이 되어 "favorit" 로 저장되었습니다. message.nori 에는 "슈퍼영웅" 이 한글로 분석되어 "슈퍼", "영웅" 으로 분리되어 저장되었습니다. 즉 match 쿼리를 할 때 "messages": "영웅" 으로는 검색이 안되지만 "messages.nori": "영웅" 으로 검색하면 검색이 됩니다.
// message 역 색인에서 "영웅" 검색
GET my_index/_search
{
"query": {
"match": {
"message": "영웅"
}
}
}
// message.nori 역 색인에서 "영웅" 검색
GET my_index/_search
{
"query": {
"match": {
"message.nori": "영웅"
}
}
}
멀티 필드는 한 필드에 여러 애널라이저를 적용해야 하는 경우, 특히 다국어로 씌여진 도큐먼트를 분석해야 할 때 매우 유용합니다.