본문 바로가기
WIKI 기술 지식 베이스

Search Relevance Workbench

원문 보기 위키 갱신

출처: 문서

본문

Search Relevance Workbench

3.1에 도입됨 {: .label .label-purple }

검색 애플리케이션에서 관련성 튜닝은 최종 사용자에게 적절한 검색 결과를 제공하기 위한 지속적이고 반복적인 작업이에요. Search Relevance Workbench의 도구는 검색 관련성 엔지니어와 비즈니스 사용자가 애플리케이션 사용자에게 최고의 검색 경험을 만들 수 있도록 도와줘요. 내부 정보를 숨기지 않고 이를 수행하기 때문에, 엔지니어는 필요에 따라 실험하고 세부 사항을 조사할 수 있어요.

Search Relevance Workbench는 검색 품질 평가 과정을 단순화하는 프런트엔드 컴포넌트로 구성돼요. 프런트엔드는 제공되는 각 도구의 리소스를 관리하기 위해 OpenSearch Search Relevance 플러그인을 백엔드로 사용해요. 예를 들어, 대부분의 사용 사례에서는 검색 구성, 쿼리 세트, 판단 목록을 만들고 사용하는 일이 포함돼요. 이러한 리소스는 모두 Search Relevance 플러그인이 생성, 업데이트, 삭제, 유지 관리해요. 관련성 개선에 만족하게 되면, 실험 결과를 가져와서 변경 사항을 검색 애플리케이션에 직접 배포할 수 있어요.

더 구조화된 실험으로 넘어가기 전에, 단일 쿼리 비교 UI를 사용해 단일 쿼리를 빠르게 분석할 수 있어요.

핵심 관련성 개념

Search Relevance Workbench는 제공하는 실험 종류에 따라 서로 다른 컴포넌트를 사용해요:

  • 쿼리 세트: _쿼리 세트(query set)_는 쿼리의 모음이에요. 이 쿼리들은 검색 관련성 평가 실험에서 사용돼요.
  • 검색 구성: _검색 구성(search configuration)_은 실험을 위해 쿼리를 실행할 때 사용할 패턴을 설명해요.
  • 판단 목록: _판단(judgment)_은 주어진 쿼리에 대한 특정 문서의 관련성을 나타내는 평점이에요. 여러 판단이 모여서 판단 목록을 이뤄요.
  • 실험: _실험(experiment)_은 알고리즘의 효과를 평가하기 위해 설계된 통제된 테스트예요. 여러 종류의 실험이 제공돼요.

사용 가능한 검색 결과 품질 실험

Search Relevance Workbench는 세 가지 유형의 실험을 제공해요:

쿼리 세트 생성하기

검색 구성을 비교하려면, 검색을 실행할 쿼리 세트를 만들어야 해요. User Behavior Insights(UBI) 사양을 따르는 검색 행동 데이터에 접근할 수 있다면, _plugins/search_relevance/query_sets/create 엔드포인트로 요청을 보낼 수 있어요.

다음 예제 요청은 직접 정의한 쿼리 세트를 Search Relevance Workbench에 업로드해요:

PUT _plugins/_search_relevance/query_sets
{
  "name": "TVs",
  "description": "TV queries",
  "sampling": "manual",
  "querySetQueries": [
    {
      "queryText": "tv"
    },
    {
      "queryText": "led tv"
    }
  ]
}

{% include copy-curl.html %}

응답에는 실험에 사용할 쿼리 세트의 query_set_id가 담겨 있어요:

{
  "query_set_id": "1856093f-9245-449c-b54d-9aae7650551a",
  "query_set_result": "CREATED"
}

검색 구성 생성하기

검색 구성은 쿼리 세트의 각 쿼리를 어떻게 실행할지 지정해요. 검색 구성을 만들려면, _plugins/search_relevance/search_configurations 엔드포인트로 검색 요청을 보내면 돼요. 모든 검색 구성에는 search_configuration_name과 query_body가 포함돼요.

예제: 두 개의 검색 구성 생성하기

첫 번째 실험에서는 title 필드에 가중치 10을 추가하면 검색 구성에 어떤 영향을 주는지 살펴볼 거예요. 먼저, 현재 사용 중인 검색 구성을 OpenSearch에 업로드해요:

PUT _plugins/_search_relevance/search_configurations
{
  "name": "my_production_config",
  "query": "{\"query\":{\"multi_match\":{\"query\":\"%SearchText%\",\"fields\":[\"id\",\"title\",\"category\",\"bullets\",\"description\",\"attrs.Brand\",\"attrs.Color\"]}}}",
  "index": "ecommerce"
}

{% include copy-curl.html %}

응답에는 검색 구성 ID가 담겨 있어요:

{
  "search_configuration_id": "122fbde8-d593-4d71-96d4-cbe3b4977468",
  "search_configuration_result": "CREATED"
}

다음으로, 다른 검색 구성을 만들고 title 필드에 가중치 10을 적용해요:

PUT _plugins/_search_relevance/search_configurations
{
  "name": "title_boost",
  "query": "{\"query\":{\"multi_match\":{\"query\":\"%SearchText%\",\"fields\":[\"id\",\"title^10\",\"category\",\"bullets\",\"description\",\"attrs.Brand\",\"attrs.Color\"]}}}",
  "index": "ecommerce"
}

{% include copy-curl.html %}

응답에는 가중치가 적용된 검색 구성의 ID와 생성 성공 여부가 담겨 있어요:

{
  "search_configuration_id": "0d687614-df5b-4b6b-8110-9d8c6d407963",
  "search_configuration_result": "CREATED"
}

검색 결과 목록 비교 실험 실행하기

첫 번째 실험을 실행하려면 쿼리 세트 하나와 검색 구성 두 개(그리고 대응하는 인덱스)가 필요해요. 검색 결과를 비교하면, 검색 구성을 수정하는 것이 검색 결과에 어떤 영향을 주는지 가늠할 수 있어요. 실험을 만들려면 _plugins/search_relevance/experiments 엔드포인트로 요청을 보내요:

PUT _plugins/_search_relevance/experiments
{
 "querySetId": "1856093f-9245-449c-b54d-9aae7650551a",
 "searchConfigurationList": ["122fbde8-d593-4d71-96d4-cbe3b4977468", "0d687614-df5b-4b6b-8110-9d8c6d407963"],
 "size": 10,
 "type": "PAIRWISE_COMPARISON"
}

{% include copy-curl.html %}

응답에는 실험 ID가 담겨 있어요:

{
  "experiment_id": "dbae9786-6ea0-413d-a500-a14ef69ef7e1",
  "experiment_result": "CREATED"
}

실험 결과를 가져오려면 반환된 experiment_id를 사용해요:

GET _plugins/_search_relevance/experiments/dbae9786-6ea0-413d-a500-a14ef69ef7e1

{% include copy-curl.html %}

응답은 상세한 실험 결과를 제공해요:

응답
{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": ".plugins-search-relevance-experiment",
        "_id": "dbae9786-6ea0-413d-a500-a14ef69ef7e1",
        "_score": 1,
        "_source": {
          "id": "dbae9786-6ea0-413d-a500-a14ef69ef7e1",
          "timestamp": "2025-06-14T14:02:17.347Z",
          "type": "PAIRWISE_COMPARISON",
          "status": "COMPLETED",
          "querySetId": "1856093f-9245-449c-b54d-9aae7650551a",
          "searchConfigurationList": [
            "122fbde8-d593-4d71-96d4-cbe3b4977468",
            "0d687614-df5b-4b6b-8110-9d8c6d407963"
          ],
          "judgmentList": [],
          "size": 10,
          "results": [
            {
              "snapshots": [
                {
                  "searchConfigurationId": "0d687614-df5b-4b6b-8110-9d8c6d407963",
                  "docIds": [
                    "B01M1D0KL1",
                    "B07YSMD3Z9",
                    "B07V4CY9GZ",
                    "B074KFP426",
                    "B07S8XNWWF",
                    "B07XBJR7GY",
                    "B075FDWSHT",
                    "B01N2Z17MS",
                    "B07F1T4JFB",
                    "B07S658ZLH"
                  ]
                },
                {
                  "searchConfigurationId": "122fbde8-d593-4d71-96d4-cbe3b4977468",
                  "docIds": [
                    "B07Q45SP9P",
                    "B074KFP426",
                    "B07JKVKZX8",
                    "B07THVCJK3",
                    "B0874XJYW8",
                    "B08LVPWQQP",
                    "B07V4CY9GZ",
                    "B07X3BS3DF",
                    "B074PDYLCZ",
                    "B08CD9MKLZ"
                  ]
                }
              ],
              "queryText": "led tv",
              "metrics": [
                {
                  "metric": "jaccard",
                  "value": 0.11
                },
                {
                  "metric": "rbo50",
                  "value": 0.03
                },
                {
                  "metric": "rbo90",
                  "value": 0.13
                },
                {
                  "metric": "frequencyWeighted",
                  "value": 0.2
                }
              ]
            },
            {
              "snapshots": [
                {
                  "searchConfigurationId": "0d687614-df5b-4b6b-8110-9d8c6d407963",
                  "docIds": [
                    "B07X3S9RTZ",
                    "B07WVZFKLQ",
                    "B00GXD4NWE",
                    "B07ZKCV5K5",
                    "B07ZKDVHFB",
                    "B086VKT9R8",
                    "B08XLM8YK1",
                    "B07FPP6TB5",
                    "B07N1TMNHB",
                    "B09CDHM8W7"
                  ]
                },
                {
                  "searchConfigurationId": "122fbde8-d593-4d71-96d4-cbe3b4977468",
                  "docIds": [
                    "B07Q7VGW4Q",
                    "B00GXD4NWE",
                    "B07VML1CY1",
                    "B07THVCJK3",
                    "B07RKSV7SW",
                    "B010EAW8UK",
                    "B07FPP6TB5",
                    "B073G9ZD33",
                    "B07VXRXRJX",
                    "B07Q45SP9P"
                  ]
                }
              ],
              "queryText": "tv",
              "metrics": [
                {
                  "metric": "jaccard",
                  "value": 0.11
                },
                {
                  "metric": "rbo50",
                  "value": 0.07
                },
                {
                  "metric": "rbo90",
                  "value": 0.16
                },
                {
                  "metric": "frequencyWeighted",
                  "value": 0.2
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

OpenSearch Dashboards에서 Search Relevance Workbench 사용하기

OpenSearch Dashboards에서 Search Relevance Workbench의 모든 컴포넌트를 만들고 실험 결과를 시각화할 수 있어요. 이 예제에서는 동일한 실험을 만들고 그 결과를 살펴볼 거예요.

왼쪽 탐색 창에서 OpenSearch Plugins > Search Relevance를 선택한 다음 Query Set Comparison을 선택하세요. 다음 이미지를 참고하세요.

쿼리 세트 비교 실험 선택

앞서 만든 쿼리 세트(TVs)와 검색 구성(my_production_config, title_boost)을 선택한 다음 Start Evaluation을 선택하세요. 다음 이미지를 참고하세요.

쿼리 세트 비교 실험 정의

그러면 자동으로 실험 개요 테이블로 이동하는데, 다음 이미지와 같아요.

실험 개요 테이블

결과를 확인하려면 목록 맨 위(가장 최근)의 실험을 선택하세요. 실험 보기 페이지에는 세 가지 요소가 표시돼요:

  1. 실험 파라미터.
  2. 실험에서 도출된 집계 지표. 다음 이미지를 참고하세요. 비교 실험의 집계 지표
  3. 쿼리별 개별 지표.

두 결과 집합의 차이를 시각적으로 평가하려면 쿼리 이벤트를 선택하세요.

더 알아보기 (Learn more)