검색어 해석 최적화를 위한 스키마 구조화

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

결과 표시는 신뢰도에 따라 달라집니다. 쿼리 문자열이 특정 스키마 필드에 일관적으로 표시되면 신뢰도가 높아집니다 (예: actors 필드에 '톰 행크스'를 입력하는 경우). 문자열이 일반 산문 내에 표시되면 신뢰도가 감소합니다. 신뢰도가 높으면 해석된 결과만 표시되고 신뢰도가 낮으면 해석된 결과가 표준 키워드 결과와 혼합됩니다.

검색어 해석의 예시

영화 정보가 포함된 데이터베이스를 생각해 보세요. 그림 1은 샘플 검색어와 해석을 보여줍니다.

검색어 해석 개요
그림 1. 검색어 해석

이 예에서 검색어 해석은 다음을 수행합니다.

  • 스키마에서 최상위 객체가 objecttype:movies임을 확인합니다.
  • 문서를 검색하여 'action'이 발생하는 위치를 식별합니다. genre 필드에 주로 표시되면 해당 필드의 속성 값일 가능성이 높아집니다.

결과 해석은 다음과 같습니다. actor:"tom hanks" genre:action objecttype:movies

검색어 해석은 모든 사용자에게 자동으로 적용되지만, 다음 섹션에 설명된 대로 스키마를 구조화하여 최적화할 수 있습니다.

검색어 해석을 위한 스키마 구조화

스키마를 최적화하면 검색어 해석의 이점을 누릴 수 있습니다.

표시 이름 해석 사용 설정

쿼리 해석은 objectDefinitionspropertyDefinitions을 사용하여 쿼리를 해석합니다. 속성에는 displayLabel, 객체에는 objectDisplayLabel, 연산자에는 operatorName를 사용하여 직관적인 표시 이름을 만듭니다.

다음 예는 영화 객체의 직관적인 표시 이름을 보여줍니다.

{
  "objectDefinitions": [{
    "name": "movie",
    "options": {
      "displayOptions": { "objectDisplayLabel": "Films" }
    },
    "propertyDefinitions": [{
      "name": "genre",
      "isReturnable": true,
      "textPropertyOptions": {
        "operatorOptions": { "operatorName": "genre" }
      },
      "displayOptions": { "displayLabel": "Category" }
    }]
  }]
}

이러한 표시 이름을 통해 다음과 같은 해석이 가능합니다.

  • '액션 영화' -> genre:action object:movies
  • 'movies with genre action or thriller' -> objecttype:movies genre:(action OR thriller)
  • 'comedy category movies'(코미디 카테고리 영화) -> genre:comedy objecttype:movies

날짜, 숫자, 정렬 해석 사용 설정

모든 날짜 및 숫자 속성에 대해 IntegerOperatorOptions에서 lessThanOperatorNamegreaterThanOperatorName를 정의합니다. 정렬을 사용 설정하려면 isSortable를 설정합니다.

이 예에서는 다음 옵션을 사용 설정합니다.

{
  "objectDefinitions": [{
    "propertyDefinitions": [
      {
        "name": "runtime",
        "isSortable": true,
        "integerPropertyOptions": {
          "operatorOptions": {
            "operatorName": "runtime",
            "lessThanOperatorName": "runtimelessthan",
            "greaterThanOperatorName": "runtimegreaterthan"
          }
        }
      },
      {
        "name": "releasedate",
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "releasedate",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

이러한 설정을 사용하면 다음과 같은 해석이 가능합니다.

  • 'movies released this year' -> objecttype:movies releasedafter:2019-1-1 releasedbefore:2019-12-31
  • 'movies with runtime less than 90' -> objecttype:movies runtimelessthan:90

예약된 연산자 해석 사용 설정

type, before, after, objecttype과 같은 기본 제공 연산자를 사용합니다.

  1. beforeafter를 사용하려면 ItemMetadata에서 updateTime를 채우세요.
  2. 자동 감지를 위해 ItemMetadata에서 mimeType를 채웁니다. 예를 들어 'action videos'는 동영상 MIME 유형이 있는 문서를 나열합니다.

검색어 해석 제한사항

  • 다음 데이터 소스 ACL에만 적용됩니다.
    • 도메인 공개
    • 데이터 소스가 공개됩니다.
    • 대부분의 문서가 동일한 상속된 ACL을 공유합니다.
  • 공유 연산자 이름 (예: priorityseverity 모두 신뢰도가 0~3으로 낮습니다.
  • 기본적으로 해석에서는 exactMatchWithOperator를 사용하지 않는 한 필드 값에 소문자를 사용합니다.
  • source 연산자는 지원되지 않습니다.
  • 연산자와 자유 텍스트 용어를 조합한 검색어 (예: 'p0 cases severity:s0')는 해석되지 않습니다.
  • 결과는 항상 관련성 순위가 지정된 결과와 혼합됩니다.