Keyword search

Cloud_ Ghost·2025년 9월 8일

opensearch

목록 보기
23/23

OpenSearch 키워드 검색 가이드

https://docs.opensearch.org/latest/search-plugins/keyword-search/

키워드 검색

기본적으로 OpenSearch는 Okapi BM25 알고리즘을 사용하여 문서 점수를 계산합니다. BM25는 쿼리에 나타나는 단어들에 대해 어휘적 검색을 수행하는 키워드 기반 알고리즘입니다.

문서의 관련성을 결정할 때, BM25는 단어 빈도/역문서 빈도(TF/IDF)를 고려합니다:

  • 단어 빈도(Term Frequency): 검색어가 더 자주 나타나는 문서가 더 관련성이 높다고 규정합니다.
  • 역문서 빈도(Inverse Document Frequency): 코퍼스의 모든 문서에서 일반적으로 나타나는 단어들(예: "the"와 같은 관사)에 더 적은 가중치를 부여합니다.

예제

다음 예제 쿼리는 shakespeare 인덱스에서 "long live king" 단어들을 검색합니다:

GET shakespeare/_search
{
  "query": {
    "match": {
      "text_entry": "long live king"
    }
  }
}

응답에는 일치하는 문서들이 포함되며, 각각 _score 필드에 관련성 점수가 포함됩니다:

{
  "took": 113,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2352,
      "relation": "eq"
    },
    "max_score": 18.781435,
    "hits": [
      {
        "_index": "shakespeare",
        "_id": "32437",
        "_score": 18.781435,
        "_source": {
          "type": "line",
          "line_id": 32438,
          "play_name": "Hamlet",
          "speech_number": 3,
          "line_number": "1.1.3",
          "speaker": "BERNARDO",
          "text_entry": "Long live the king!"
        }
      },
      // ... 추가 결과들
    ]
  }
}

유사도 알고리즘

지원되는 유사도 알고리즘은 다음과 같습니다:

알고리즘설명
BM25기본 OpenSearch Okapi BM25 유사도 알고리즘
LegacyBM25 (Deprecated)이전 LegacyBM25Similarity 구현. 하위 호환성을 위해 유지
boolean용어에 부스트 값과 동일한 점수를 할당. 문서 점수가 용어 일치의 이진 값을 기반으로 하기를 원할 때 boolean 유사도 사용

OpenSearch 3.0의 BM25 점수 계산 중요 변경사항

OpenSearch 3.0에서 기본 유사도 알고리즘이 LegacyBM25Similarity에서 Lucene의 네이티브 BM25Similarity로 변경되었습니다.

주요 변경사항:

  • LegacyBM25Similarity에서는 BM25 공식의 분자에 k₁ + 1의 추가 상수 인수가 포함되었습니다
  • BM25Similarity에서는 더 깔끔한 정규화를 위해 이 상수가 제거되었습니다
  • BM25Similarity에서 생성된 점수는 LegacyBM25Similarity보다 낮으며, 일반적으로 약 2.2배 정도 차이납니다
  • 순위는 영향받지 않습니다 - 상수 인수가 문서의 상대적 순서를 변경하지 않기 때문입니다

이전 점수 계산 방식을 유지하려면 필드나 인덱스에서 LegacyBM25를 명시적으로 구성하세요.

유사도 지정하기

필드 레벨에서 매핑을 구성할 때 similarity 매개변수에서 유사도 알고리즘을 지정할 수 있습니다:

PUT /testindex
{
  "mappings": {
    "properties": {
      "bm25_field": { 
        "type": "text"
      },
      "boolean_field": {
        "type": "text",
        "similarity": "boolean" 
      }
    }
  }
}

BM25 유사도 구성

인덱스 레벨에서 BM25 유사도 매개변수를 다음과 같이 구성할 수 있습니다:

PUT /testindex
{
  "settings": {
    "index": {
      "similarity": {
        "custom_similarity": {
          "type": "BM25",
          "k1": 1.2,
          "b": 0.75,
          "discount_overlaps": "true"
        }
      }
    }
  }
}

BM25 유사도 매개변수

매개변수데이터 타입설명
k1Float비선형 용어 빈도 정규화(포화) 속성을 결정. 기본값: 1.2
bFloat문서 길이가 TF 값을 정규화하는 정도를 결정. 기본값: 0.75
discount_overlapsBoolean노름 계산 시 겹치는 토큰(위치 증분이 0인 토큰)을 무시할지 결정. 기본값: true

레거시 BM25 유사도 구성

이전 유사도 동작을 유지하려면 유사도 타입으로 LegacyBM25를 지정하세요:

PUT /testindex
{
  "settings": {
    "index": {
      "similarity": {
        "default": {
          "type": "LegacyBM25",
          "k1": 1.2,
          "b": 0.75
        }
      }
    }
  }
}

다음 단계

  • 쿼리 및 필터 컨텍스트에 대해 학습하기
  • OpenSearch가 지원하는 쿼리 타입에 대해 학습하기
profile
행복합시다~

0개의 댓글