검색 품질 향상

검색 품질이란 검색을 수행하는 사용자가 인식하는 순위 및 재현율을 기준으로 측정한 검색결과의 품질입니다.

순위는 항목의 순서를, 재현율은 검색된 관련 항목의 수를 나타냅니다. 항목은 문서라고도 하며, Google Cloud Search가 색인 생성할 수 있는 모든 디지털 콘텐츠 조각을 말합니다. 항목의 유형으로는 Microsoft Office 문서, PDF 파일, 데이터베이스의 행, 고유 URL 등이 있습니다. 항목은 다음으로 구성됩니다.

  • 구조화된 메타데이터
  • 색인 생성이 가능한 콘텐츠
  • ACL

Cloud Search는 다양한 신호를 사용하여 검색결과(검색어로 찾은 항목)를 가져오고 순위를 매깁니다. 스키마 설정, 항목의 내용과 메타데이터(색인 생성 중), 검색 애플리케이션을 통해 Cloud Search의 신호에 영향을 줄 수 있습니다. 이 문서의 목표는 이러한 신호 영향 요소를 수정하여 검색 품질을 높이는 데 기여하는 것입니다.

권장 설정 및 선택적 설정을 요약한 내용은 권장 및 선택적 검색 품질 설정 요약을 참조하세요.

적합성 점수에 영향 주기

적합성이란 검색결과와 원래 검색어의 관련성을 나타냅니다. 항목의 적합성은 다음 기준에 따라 계산됩니다.

  • 각 검색어의 중요도
  • 적중 횟수(항목의 내용 또는 메타데이터에서 검색어가 등장하는 횟수)
  • 검색어 및 검색어의 변형과 Cloud Search에 색인 생성된 항목의 일치 유형

텍스트 속성의 적합성 점수에 영향을 주려면 스키마의 텍스트 속성에 RetrievalImportance를 정의합니다. RetrievalImportance가 높은 속성과 일치하면 RetrievalImportance가 낮은 속성과 일치할 때보다 높은 점수가 부여됩니다.

예를 들어 다음과 같은 특성을 갖는 데이터 소스가 있다고 가정해 보겠습니다.

  • 소프트웨어 버그 기록을 저장하는 데 사용되는 데이터 소스입니다.
  • 각 버그에는 이름, 설명, 우선순위가 있습니다.

대부분의 사용자는 버그 이름을 사용하여 이 데이터 소스를 쿼리할 것이므로 스키마에서 이름의 RetrievalImportanceHIGHEST로 설정합니다.

반대로, 대부분의 사용자는 버그 설명을 사용하여 이 데이터 소스를 쿼리하지 않을 것이므로 설명의 RetrievalImportanceDEFAULT로 설정합니다. 다음은 RetrievalImportance 설정을 포함하는 샘플 스키마입니다.

{
      "objectDefinitions": [
        {
          "name": "issues",
          "propertyDefinitions": [
            {
              "name": "summary",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": HIGHEST
                  }
                }
              },
            {
              "name": "description",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": DEFAULT
                  }
                }
              },
            {
              "name": "label",
                "isRepeatable": true,
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": DEFAULT
                  }
                }
              },
            {
              "name": "comments",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": DEFAULT
                  }
                }
              },
            {
              "name": "project",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": HIGH
                  }
                }
              },
            {
              "name": "duedate",
              "datePropertyOptions": {
              }
            },
            ...
          ]
        }
      ]
    }
    

HTML 문서의 경우 <title>, <h1> 등의 태그와 글꼴 크기, 굵은 글꼴 등의 서식 설정을 사용하여 다양한 검색어의 중요도를 판단합니다. ContentFormatTEXT이면 ItemContent의 검색 중요도가 DEFAULT이고, HTML이면 HTML 속성을 기준으로 검색 중요도를 판단합니다.

최신성에 영향 주기

최신성은 항목이 얼마나 최근에 수정되었는지를 측정하며 ItemMetadatacreateTimeupdateTime 속성에 따라 판단됩니다. 최신성이 높은 항목은 순위가 상승합니다.

객체의 최신성이 계산되는 방식에 영향을 주려면 스키마에서 FreshnessOptionsfreshnessPropertyfreshnessDuration을 조정합니다.

freshnessProperty를 통해 기본값인 updateTime 대신 날짜 또는 타임스탬프 속성을 사용하여 최신성을 계산할 수 있습니다.

위에서 예시한 소프트웨어 버그 추적 시스템에서 기한을 freshnessProperty로 사용하면 기한이 현재 날짜와 가장 가까운 항목을 '최신성이 높은' 것으로 간주하여 순위를 높일 수 있습니다. 다음은 freshnessProperty 설정을 포함하는 샘플 스키마입니다.

{
      "objectDefinitions": [
        {
          "name": "issues",
          "options": {
            "freshnessOptions": {
              "freshnessProperty": "duedate"
            }
          },
          "propertyDefinitions": [
            {
              "name": "summary",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": HIGHEST
                }
              }
            },
            {
              "name": "duedate",
              "datePropertyOptions": {
              }
            },
            ...
          ]
        }
      ]
    }
    

freshnessDuration을 사용하여 항목이 만료된 것으로 간주할 시점을 정합니다. 예를 들어 데이터 소스가 정기적으로 색인 생성되지 않거나 최신성이 순위에 영향을 주지 않아야 할 수 있습니다. 이러한 경우 freshnessDuration에 높은 값을 지정하면 됩니다.

직원 프로필 정보를 포함하는 데이터 소스가 있다고 가정해 보겠습니다. 이 시나리오에서는 직원 정보의 변경이 직원의 순위와는 무관한 경우가 많으므로 freshnessDuration이 높아야 합니다. 다음은 freshnessDuration 설정을 포함하는 샘플 스키마입니다.

{
      "objectDefinitions": [
        {
          "name": "people",
          "options": {
            "freshnessOptions": {
              "freshnessDuration": "315360000s", # 100 years
            }
          },
        }
      ]
    }
    

뉴스 기사를 포함하는 데이터 소스와 같이 콘텐츠가 빠르게 변경되는 데이터 소스에서는 freshnessDuration을 매우 낮은 값으로 설정할 수 있습니다. 이 시나리오에서는 가장 최근에 만들거나 수정한 문서가 가장 관련성이 높습니다. 다음은 콘텐츠가 빠르게 변경되는 데이터 소스의 freshnessDuration 설정을 포함하는 샘플 스키마입니다.

{
      "objectDefinitions": [
        {
          "name": "news",
          "options": {
            "freshnessOptions": {
              "freshnessDuration": "259200s", # 3 days
            }
          },
        }
      ]
    }
    

품질에 영향 주기

품질은 항목의 정확성과 유용성을 측정한 것입니다. 데이터 소스는 의미가 비슷하면서 품질이 서로 다른 여러 문서를 포함할 수 있습니다. SearchQualityMetadata를 사용하면 품질 값을 0에서 1 사이의 값으로 지정할 수 있습니다. 이 값이 큰 항목은 값이 작은 항목보다 순위가 상승합니다. Cloud Search에 제공된 정보와 무관하게 특정 항목의 품질에 영향을 주거나 품질을 높이려는 경우에만 이 설정을 사용하세요.

예를 들어 직원의 복지 혜택 문서를 포함하는 데이터 소스가 있다고 가정해 보겠습니다. 이러한 경우 SearchQualityMetadata를 사용하여 인사과 직원이 작성한 문서에 다른 직원이 작성한 문서보다 높은 순위를 부여할 수 있습니다.

다음은 버그 추적 시스템의 문제에 대한 SearchQualityMetadata 설정을 포함하는 샘플 스키마입니다.

{
      "name": "datasources/.../items/issue1",
      "acl": {
        ...
      },
      "metadata": {
        "title": "Issue 1"
        "objectType": "issues"
      },
      ...
    }

    {
      "name": "datasources/.../items/issue2",
      "acl": {
        ...
      },
      "metadata": {
        "title": "Issue 2"
        "objectType": "issues"
        "searchQualityMetadata": {
          "quality": 0.5
        }
      },
      ...
    }

    {
      "name": "datasources/.../items/issue3",
      "acl": {
        ...
      },
      "metadata": {
        "title": "Issue 3"
        "objectType": "issues"
        "searchQualityMetadata": {
          "quality": 1
        }
      },
      ...
    }
    

이 스키마에서는 사용자가 'issue'라는 검색어로 검색할 때 스키마의 Issue 3(quality가 1)에 Issue 2(quality가 0.5) 및 Issue 1(아무것도 지정되지 않은 경우 기본 quality인 0)보다 높은 순위가 부여됩니다.

필드 유형 사용에 영향 주기

Cloud Search를 사용하면 열거형 또는 정수 속성의 값에 따라 순위에 영향을 줄 수 있습니다. 각 정수 또는 열거형 속성에 OrderedRanking을 지정할 수 있습니다. 이 설정의 값은 다음과 같습니다.

  • NO_ORDER(기본값): 속성이 순위에 영향을 주지 않습니다.
  • ASCENDING: 이 정수 또는 열거형 속성의 값이 큰 항목은 값이 작은 항목보다 순위가 상승합니다.
  • DESCENDING: 정수 또는 열거형 속성의 값이 작은 항목은 값이 큰 항목보다 순위가 상승합니다.

예를 들어 버그 추적 시스템에서 각 버그의 열거형 속성에 버그의 우선순위를 HIGH(1), MEDIUM(2), LOW(3) 중 하나로 저장한다고 가정해 보겠습니다. 이 시나리오에서 OrderedRankingDESCENDING으로 설정하면 우선순위가 HIGH인 버그가 우선순위가 LOW인 버그보다 순위가 상승합니다. 다음은 버그 추적 시스템의 문제에 대한 OrderedRanking 설정을 포함하는 샘플 스키마입니다.

{
      "objectDefinitions": [
        {
          "name": "issues",
          "options": {
            "freshnessOptions": {
              "freshnessProperty": "duedate",
            }
          },
          "propertyDefinitions": [
            {
              "name": "summary",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": HIGHEST
                }
              }
            },
            {
              "name": "duedate",
              "datePropertyOptions": {
              }
            },
            {
              "name": "priority",
              "enumPropertyOptions": {
                "possibleValues": [
                  {
                    "stringValue": "HIGH",
                    "integerValue": 1
                  },
                  {
                    "stringValue": "MEDIUM",
                    "integerValue": 2
                  },
                  {
                    "stringValue": "LOW",
                    "integerValue": 3
                  }
                ],
                "orderedRanking": DESCENDING,
              }
            },

            ...
          ]
        }
      ]
    }
    

또한 버그 추적 시스템은 버그의 상대적 중요도에 대한 사용자의 의견을 취합하는 데 사용되는 votes라는 정수 속성을 가질 수 있습니다. votes 속성을 사용하면 표를 가장 많이 얻은 버그의 중요도를 높여 순위에 영향을 줄 수 있습니다. 이러한 경우 votes 속성의 OrderedRankingASCENDING으로 지정하면 표를 많이 얻을수록 순위가 상승합니다. 다음은 버그 추적 시스템의 문제에 대한 OrderedRanking 설정을 포함하는 샘플 스키마입니다.

{
      "objectDefinitions": [
        {
          "name": "issues",
          "propertyDefinitions": [
            {
              "name": "summary",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": HIGHEST
                }
              }
            },
            {
              "name": "description",
              "textPropertyOptions": {
                "retrievalImportance": {
                  "importance": DEFAULT
                }
              }
            },
            {
              "name": "votes",
              "integerPropertyOptions": {
                "orderedRanking": ASCENDING,
                "minimumValue": 0,
                "maximumValue": 1000,
              }
            },

            ...
          ]
        }
      ]
    }
    

검색어 확장을 통해 순위에 영향 주기

검색어 확장이란 결과의 품질을 높이기 위해 동의어와 맞춤법을 사용하여 검색어의 범위를 넓히는 것입니다.

동의어를 사용하여 검색결과에 영향 주기

Cloud Search는 공개 웹 콘텐츠에서 추론한 동의어를 활용하여 검색어의 범위를 넓힙니다. 커스텀 동의어를 정의하여 조직별 용어, 예를 들어 특정 조직에서 사용하는 약어 또는 업계 고유 용어를 표현할 수도 있습니다.

커스텀 동의어를 데이터 소스 내에 정의하거나 별도의 데이터 소스로 정의할 수 있습니다. 커스텀 동의어는 정의된 위치에 관계없이 도메인의 모든 검색 애플리케이션에 적용됩니다. 커스텀 동의어 정의에 대한 자세한 내용은 동의어 정의를 참조하세요.

맞춤법을 사용하여 검색결과에 영향 주기

Cloud Search는 공개 Google 검색 데이터를 사용하여 구축된 모델을 기반으로 맞춤법을 추천합니다. Cloud Search는 검색어와 관련하여 맞춤법 실수가 발견될 경우 SpellResult에 추천 검색어를 반환합니다. 추천된 맞춤법을 사용자에게 표시하여 제안할 수 있습니다. 예를 들어 사용자가 검색어를 'employe'로 잘못 입력했다면 'employee를 입력하셨나요?'라는 제안을 표시할 수 있습니다.

또한 Cloud Search는 맞춤법 교정을 동의어로 사용하여 맞춤법 실수 때문에 놓칠 수 있었던 문서를 검색합니다.

검색 애플리케이션 설정을 통해 순위에 영향 주기

Google Cloud Search 소개의 설명과 같이, 검색 애플리케이션이란 검색 인터페이스와 연결되어 검색에 대한 컨텍스트 정보를 제공하는 설정의 그룹입니다. 다음 구성을 사용하여 검색 애플리케이션을 통해 순위에 영향을 줄 수 있습니다.

  • 스코어링 구성
  • 소스 구성

다음 두 섹션에서는 이러한 구성을 사용하여 순위에 영향을 주는 방법을 설명합니다.

스코어링 구성 조정

각 검색 애플리케이션에 순위 결정 시 몇 가지 신호를 적용하는 방식을 제어하는 데 사용되는 ScoringConfig를 지정할 수 있습니다. 현재는 최신성맞춤설정을 사용 중지할 수 있습니다.

최신성을 사용 중지하면 데이터 소스의 스키마에 지정된 최신성 옵션에 관계없이 검색 애플리케이션에 나열된 모든 데이터 소스에서 사용 중지됩니다. 마찬가지로 맞춤설정을 사용 중지하면 소유자 순위 상승 및 상호작용 순위 상승이 작동하지 않습니다.

이 설정을 구성하는 방법에 대한 단계별 안내는 커스텀 검색 환경 만들기를 참조하세요.

소스 구성 조정

소스 구성을 사용하면 검색 애플리케이션의 데이터 소스 수준 설정을 지정할 수 있습니다. 다음과 같은 설정이 지원됩니다.

  • 소스 중요도
  • 크라우딩

소스 중요도 설정

소스 중요도는 검색 애플리케이션 내에서 특정 데이터 소스의 상대적 중요도를 나타냅니다. SourceScoringConfigSourceImportance 필드에 이 설정을 지정할 수 있습니다. 소스 중요도가 HIGH인 데이터 소스의 항목은 소스 중요도가 DEFAULT 또는 LOW인 데이터 소스의 항목보다 순위가 상승합니다. 사용자가 특정 데이터 소스의 결과를 선호할 것으로 예상되는 경우 이 설정을 사용하여 순위에 영향을 줄 수 있습니다.

예를 들어 제품 지원 포털에 외부 및 내부 문제해결 데이터가 있다고 가정해 보겠습니다. 이 시나리오에서는 검색 애플리케이션이 내부 데이터 소스의 결과를 우선시하도록 구성할 수 있습니다.

이 설정을 구성하는 방법에 대한 단계별 안내는 커스텀 검색 환경 만들기를 참조하세요.

크라우딩 설정

크라우딩이란 검색 애플리케이션의 데이터 소스에서 반환될 수 있는 결과의 최대 개수입니다. SourceCrowdingConfignumResults 필드를 사용하여 이 값을 제어할 수 있습니다. 기본값은 3이며, 이 경우 데이터 소스 중 하나에서 결과 3개를 표시했으면 Cloud Search가 다른 데이터 소스의 결과를 보여주기 시작합니다. 모든 데이터 소스가 크라우딩 한도에 도달했거나 다른 데이터 소스에 더 이상 결과가 없는 경우에만 첫 번째 데이터 소스의 항목이 다시 고려됩니다.

이 설정은 검색 결과의 다양성을 보장하고 데이터 소스 중 하나가 검색결과 페이지를 독점하지 않도록 하는 데 도움이 됩니다.

이 설정을 구성하는 방법에 대한 단계별 안내는 커스텀 검색 환경 만들기를 참조하세요.

맞춤설정을 통해 순위에 영향 주기

맞춤설정이란 결과에 액세스하는 사용자 개인별로 맞춤화된 검색결과를 보여주는 것입니다. 다음과 같은 기준에 따라 항목에 우선순위를 부여하여 순위에 영향을 줄 수 있습니다.

  • 항목 소유권
  • 항목 상호작용
  • 항목 언어

다음 세 섹션에서는 이러한 기준에 따라 검색 품질에 영향을 주는 방법을 설명합니다.

항목 소유권에 따라 순위에 영향 주기

항목 소유권이란 검색을 수행하는 사용자가 소유한 항목의 순위를 높이는 것을 말합니다. 각 항목의 ItemAcl에는 owners 필드가 있습니다. 검색을 수행하는 사용자가 항목 소유자이면 기본적으로 해당 항목의 순위가 상승합니다. 검색 애플리케이션에서 맞춤설정을 해제할 수 있습니다.

항목 상호작용에 따라 순위에 영향 주기

항목 상호작용이란 검색 사용자가 조회, 댓글 작성, 수정 등의 상호작용을 수행했던 항목의 순위를 높이는 것을 말합니다.

드라이브, Gmail 등의 G Suite 제품에서는 항목 상호작용 신호가 자동으로 수집됩니다. 다른 제품에서는 항목 수준에서 상호작용 데이터를 제공할 수 있습니다. 예를 들어 상호작용 유형(조회, 수정), 상호작용의 타임스탬프, 주체(항목과 상호작용한 사용자) 등의 데이터가 가능합니다. 최근에 상호작용한 항목일수록 순위가 더 상승합니다.

검색어 해석을 통해 순위에 영향 주기

Cloud Search의 검색어 해석 기능은 사용자의 검색어에 있는 연산자와 필터를 자동으로 해석하여 이러한 요소를 구조화된 연산자 기반 검색어로 변환하는 기능입니다. 검색어 해석에서는 스키마에 정의된 연산자와 색인 생성된 문서를 함께 사용하여 사용자 검색어의 의미를 추론합니다. 사용자는 이 기능을 통해 최소한의 키워드로 검색하면서 정확한 결과를 얻을 수 있습니다. 자세한 내용은 검색어 해석 최적화를 위한 스키마 구조화를 참조하세요.

항목 언어에 따라 순위에 영향 주기

언어란 검색어의 언어와 일치하지 않는 항목의 순위를 내리는 것을 말합니다. 언어에 따라 항목의 순위에 영향을 주는 요소는 다음과 같습니다.

  • RequestOptions에 지정된 languageCode
  • 검색어에서 자동으로 감지된 언어
  • 항목의 언어(ItemMetadata의 contentLanguage 또는 해당 순서로 자동으로 감지된 언어)

검색어와 항목의 언어가 일치하면 언어에 따른 순위 하락이 적용되지 않습니다. 이러한 설정이 일치하지 않으면 항목의 순위가 내려갑니다.

권장 및 선택적 검색 품질 설정 요약

다음 표에서는 모든 검색 품질 설정(권장 및 선택사항)을 보여줍니다. 권장 설정은 Cloud Search의 순위 모델을 최대한 활용하는 데 도움이 됩니다.

설정위치권장/선택사항세부정보
스키마 설정
ItemContent 필드ItemContent권장스키마를 만들거나 업데이트할 때 항목의 구조화되지 않은 콘텐츠를 입력합니다. 이 필드는 스니펫을 생성하는 데 사용됩니다.
RetrievalImportance 필드RetrievalImportance권장스키마를 만들거나 업데이트할 때 명백하게 중요도나 적합성이 높은 텍스트 속성에 설정합니다.
FreshnessOptionsFreshnessOptions선택사항스키마를 만들거나 업데이트할 때 데이터가 잘못되었거나 누락되어도 항목의 순위가 내려가지 않도록 설정합니다.
색인 생성 설정
createTime/updateTimeItemMetadata권장항목 색인 생성 중에 입력합니다.
owners 필드ItemAcl()권장항목 색인 생성 중에 입력합니다.
커스텀 동의어_dictionaryEntry 스키마권장색인 생성 중에 데이터 소스 수준에서 정의하거나 별도의 데이터 소스로 정의합니다.
quality 필드SearchQualityMetadata선택사항의미가 비슷한 다른 항목보다 기본 품질을 높이려는 경우 색인 생성 중에 품질을 설정합니다. 데이터 소스의 모든 항목에 이 필드를 설정하면 효과가 무효화됩니다.
항목 수준 상호작용 데이터interaction선택사항데이터 소스가 사용자의 상호작용을 기록하고 액세스를 제공하는 경우, 색인 생성 중에 상호작용을 입력합니다.
정수/열거형 속성OrderedRanking선택사항항목의 순서가 중요하다면 색인 생성 중에 정수 및 열거형 속성의 정렬 순위를 지정합니다.
검색 애플리케이션 설정
Personalization=falseScoringConfig 또는 CloudSearch 관리자 UI 사용권장검색 애플리케이션을 만들거나 업데이트할 때 '맞춤설정을 통해 순위에 영향 주기'의 설명에 따라 정확한 소유자 정보를 제공합니다.
SourceImportance 필드SourceCrowdingConfig선택사항특정 데이터 소스의 결과에 가중치를 주려면 이 필드를 설정합니다.
numResults 필드SourceCrowdingConfig선택사항결과의 다양성을 제어하려면 이 필드를 설정합니다.

다음 단계

다음과 같은 몇 가지 단계를 진행할 수 있습니다.

  1. 검색어 해석 최적화를 위해 스키마를 구조화합니다.

  2. _dictionaryEntry 스키마를 활용하여 회사에서 자주 사용되는 용어의 동의어를 정의하는 방법을 알아봅니다. _dictionaryEntry 스키마를 사용하는 방법은 동의어 정의를 참조하세요.