Elasticsearch norms

JunMyung Lee·2024년 10월 29일
0

Elasticsearch

목록 보기
42/42

Elasticsearch에서 norms는 텍스트 필드의 중요도(normalization factor)를 저장할지 여부를 설정하는 옵션.
주로 검색 결과의 점수 계산에 영향을 주기 때문에, 설정에 따라 성능과 색인 크기에 차이가 발생한다.

norms 설정의 의미

•	norms는 각 문서의 텍스트 필드에서 해당 필드의 길이와 다른 요인들을 기준으로 가중치(normalization factor)를 설정해주는 기능
•	필드에 norms: true 설정이 있으면 Elasticsearch는 필드의 길이와 기타 요소들을 사용하여 문서의 관련성 점수(score)를 조정
•	norms: false로 설정하면, 관련성 계산에서 이 필드에 대해 가중치 조정이 이루어지지 않

norms가 true일 때와 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를 사용하는 것이 더 적합

profile
11년차 검색개발자 입니다. 여러 지식과 함께 실제 서비스를 운영 하면서 발생한 이슈에 대해서 정리하고 공유하고자 합니다.

0개의 댓글