Elasticsearch에서 norms는 텍스트 필드의 중요도(normalization factor)를 저장할지 여부를 설정하는 옵션.
주로 검색 결과의 점수 계산에 영향을 주기 때문에, 설정에 따라 성능과 색인 크기에 차이가 발생한다.
• norms는 각 문서의 텍스트 필드에서 해당 필드의 길이와 다른 요인들을 기준으로 가중치(normalization factor)를 설정해주는 기능
• 필드에 norms: true 설정이 있으면 Elasticsearch는 필드의 길이와 기타 요소들을 사용하여 문서의 관련성 점수(score)를 조정
• norms: false로 설정하면, 관련성 계산에서 이 필드에 대해 가중치 조정이 이루어지지 않
PUT /my_index
{
"mappings": {
"properties": {
"content_with_norms": {
"type": "text",
"norms": true
},
"content_without_norms": {
"type": "text",
"norms": false
}
}
}
}
• content_with_norms
필드는 norms가 true로 설정되어 있고, content_without_norms
필드는 false로 설정
POST /my_index/_doc/1
{
"content_with_norms": "Elasticsearch is a distributed search engine",
"content_without_norms": "Elasticsearch is a distributed search engine"
}
POST /my_index/_doc/2
{
"content_with_norms": "Elasticsearch is powerful and flexible",
"content_without_norms": "Elasticsearch is powerful and flexible"
}
검색어: Elasticsearch
GET /my_index/_search
{
"query": {
"match": {
"content_with_norms": "Elasticsearch"
}
}
}
• norms: `true 필드(content_with_norms)`의 경우, 검색 결과에서 필드 길이에 따른 가중치 조정이 이루어짐. 예를 들어, 짧고 정확한 내용일수록 높은 점수를 받을 가능성이 높다
• norms: `false 필드(content_without_norms)`는 필드 길이에 관계없이 가중치 조정 없이 점수를 계산. 이로 인해 짧은 문서와 긴 문서의 점수 차이가 덜 나거나 비슷하게 나옴.
이를 통해 검색 성능이 중요한 경우에는 norms: false로 설정해 색인 크기를 줄이고 성능을 최적화
반면, 검색 정확도가 중요하다면 norms: true를 사용하는 것이 더 적합