카테고리 없음

[Elasticsearch] 정확도(Relevancy)와 검색 최적화

JABHACK 2025. 2. 3. 18:57

Elasticsearch의 정확도(Relevancy)와 스코어(Score) 점수 이해하기

검색 엔진에서 검색 결과를 얼마나 정확하게 반환하는지가 매우 중요합니다. RDBMS와 같은 시스템은 단순히 쿼리 조건을 만족하는 결과를 반환하지만, Elasticsearch는 검색 결과의 **정확도(연관성, relevancy)**를 기반으로 가장 적절한 문서를 먼저 보여줍니다. 이번 글에서는 Elasticsearch의 **정확도와 점수(score)**가 어떻게 계산되는지, 그리고 검색 결과의 순위를 결정하는 BM25 알고리즘을 통해 이를 어떻게 최적화할 수 있는지 설명하겠습니다.


1. 정확도(Relevancy)란?

🔹 정확도의 개념

**Relevancy(렐러번시, 연관성)**는 검색 결과가 입력된 검색 조건과 얼마나 정확하게 일치하는지를 나타냅니다. RDBMS는 검색 조건에 부합하는 데이터만 반환할 뿐, 어떤 데이터가 더 적절한지를 평가하는 기능이 없습니다. 반면, Elasticsearch는 각 검색 결과의 정확도를 평가하여, 사용자가 원하는 정보를 우선적으로 제공할 수 있습니다.

🔹 검색 엔진에서 정확도의 중요성

예를 들어, 구글이나 네이버 같은 웹 검색엔진을 사용할 때 사용자는 수많은 검색 결과를 보게 됩니다. 이때, 단순히 검색어가 포함된 웹페이지가 아니라, 사용자가 원하는 정보와 가장 연관성이 높은 웹페이지가 상위에 노출됩니다. Elasticsearch도 같은 원리로 동작합니다.

✅ 예시
👉 검색어: "엘라스틱서치 튜토리얼"
👉 일반적인 RDBMS의 결과: "엘라스틱서치에 대한 간단한 설명" / "튜토리얼 사이트 모음"
👉 Elasticsearch의 결과: "엘라스틱서치를 처음 배우는 사람을 위한 완벽한 튜토리얼" ✅

Elasticsearch는 사용자가 원하는 정보를 보다 정밀하게 제공하기 위해 검색 정확도를 기반으로 점수를 매깁니다.


2. 스코어(Score) 점수란?

Elasticsearch의 검색 결과는 각 문서가 검색어와 얼마나 밀접하게 관련이 있는지를 점수로 나타냅니다. 이 점수를 **스코어(score)**라고 하며, 점수가 높은 문서가 상위에 노출됩니다.

🔹 Elasticsearch에서 스코어(score) 점수 확인하기

다음은 "quick dog"을 검색하는 match 쿼리입니다.

GET my_index/_search
{
  "query": {
    "match": {
      "message": "quick dog"
    }
  }
}

🔹 스코어 점수 확인

위 쿼리를 실행하면 각 문서의 _score 값이 함께 반환됩니다.

{
  "hits": {
    "total": 3,
    "max_score": 2.5,
    "hits": [
      {
        "_id": "1",
        "_score": 2.5,
        "_source": {
          "message": "The quick brown fox jumps over the quick dog"
        }
      },
      {
        "_id": "2",
        "_score": 1.8,
        "_source": {
          "message": "The quick brown fox"
        }
      },
      {
        "_id": "3",
        "_score": 1.5,
        "_source": {
          "message": "Lazy jumping dog"
        }
      }
    ]
  }
}

🔹 해석:

  • _score가 가장 높은 문서가장 연관성이 높다고 판단된 문서입니다.
  • 상단의 max_score 값이 전체 검색 결과 중 가장 높은 점수입니다.
  • Elasticsearch는 이 스코어를 계산하기 위해 BM25 알고리즘을 사용합니다.

3. 정확도 계산 - BM25 알고리즘

BM25(Best Matching 25)는 Elasticsearch가 문서의 연관성을 평가할 때 사용하는 알고리즘입니다. BM25 점수는 다음 3가지 요소를 기반으로 계산됩니다.

🔹 1) TF (Term Frequency, 용어 빈도)

같은 검색어가 문서에서 얼마나 많이 등장하는지를 평가합니다.

  • 예시: "쥬라기 공원"이라는 검색어로 검색했을 때,
    • "쥬라기 공원"이 10번 등장하는 문서 🆙
    • "쥬라기 공원"이 5번 등장하는 문서 🆗
    • 등장 횟수가 많을수록 점수가 올라갑니다.

하지만 BM25는 TF 점수가 일정 이상 증가하면 더 이상 가중치를 주지 않습니다. (최대 25까지 증가)

🔹 2) IDF (Inverse Document Frequency, 역문서 빈도)

자주 등장하는 단어보다 희귀한 단어에 더 높은 점수를 부여합니다.

  • "공원"이라는 단어는 수많은 문서에서 등장하지만, "쥬라기"는 상대적으로 드문 단어입니다.
  • 희귀한 단어일수록 검색에서 더 중요한 의미를 가지므로, IDF 점수가 높아집니다.

🔹 3) Field Length (필드 길이)

검색어가 짧은 문서에 등장할수록 높은 점수를 받습니다.

  • 제목 필드는 짧지만 중요한 정보를 포함하므로 높은 점수를 받습니다.
  • 본문 필드는 길기 때문에 상대적으로 낮은 점수를 받을 수 있습니다.

4. 정확도와 BM25를 활용한 검색 최적화

Elasticsearch에서 검색 결과를 최적화하려면 다음 방법을 고려할 수 있습니다.

검색 필드별 가중치 부여

  • 제목(title) 필드는 가중치를 높이고, 본문(content) 필드는 가중치를 낮춤.
  • boost 값을 조절하여 특정 필드의 중요도를 높일 수 있음.
GET my_index/_search
{
  "query": {
    "multi_match": {
      "query": "엘라스틱서치 튜토리얼",
      "fields": ["title^2", "content"]
    }
  }
}

"title^2"은 title 필드의 가중치를 2배로 높인다는 의미입니다.

사용자 맞춤 검색 결과 제공

  • 사용자의 클릭 데이터와 연관성이 높은 문서를 상위에 노출.
  • Function Score Query를 활용하여 특정 문서의 점수를 조정.

동의어(Synonym) 처리

  • "영화"와 "무비"를 동일한 의미로 처리하여 검색 결과의 품질을 향상.

5. 정리

개념 설명
Relevancy (정확도) 검색어와 검색 결과가 얼마나 연관성이 높은지 평가하는 기준
Score (스코어 점수) 검색된 문서의 정확도를 수치화한 값
BM25 알고리즘 Elasticsearch가 검색 정확도를 계산하는 방법
TF (용어 빈도) 검색어가 문서에서 많이 등장할수록 높은 점수를 부여
IDF (역문서 빈도) 자주 등장하는 단어보다 희귀한 단어에 높은 점수를 부여
Field Length 문서가 짧을수록 높은 점수를 부여

6. 학습 가이드

1️⃣ BM25 알고리즘의 수식과 개념을 깊이 이해
2️⃣ Boosting, Function Score Query를 활용한 검색 최적화 학습
3️⃣ Elasticsearch의 Query DSL을 실습하며 직접 적용
4️⃣ 다른 검색 알고리즘(TF-IDF, PageRank 등)과 비교


이제 Elasticsearch의 **정확도(relevancy)와 스코어(score)**의 개념을 이해하셨나요? 🧐
다음으로는 검색 최적화를 위한 Boosting과 Function Score Query에 대해 학습해보는 것을 추천합니다! 🚀