벡터 일치 필터

Vertex Matching Engine에서 벡터 일치를 수행하는 동안 부울 규칙을 사용해 검색을 색인의 하위 집합으로 제한할 수 있습니다. 유사성 검색에서 무시할 색인 내 벡터를 Matching Engine에 알려주는 부울 조건자를 지정할 수 있습니다.

벡터 속성

벡터 데이터베이스에서 벡터 유사성 검색을 수행하는 예시 애플리케이션을 소개합니다. 또한 각 벡터는 여러 속성 카테고리(또는 네임스페이스) 각각에서 0개 이상의 속성(또는 토큰)으로 설명됩니다.

이 예시 애플리케이션에서 벡터는 colorshape 태그가 지정됩니다.

  • colorshape네임스페이스입니다.
  • redbluecolor 네임스페이스의 토큰입니다.
  • squarecircleshape 네임스페이스의 토큰입니다.

벡터 속성 지정

예시 애플리케이션에서 벡터 속성을 지정하려면 다음 안내를 따르세요.

  • '빨간색 원'을 지정하려면 {color: red}, {shape: circle}
  • '빨간색 및 파란색 정사각형'을 지정하려면 {color: red, blue}, {shape: square}
  • 색상이 없는 객체를 지정하려면 제한사항에 'color' 네임스페이스를 생략하지 마세요.

이 데이터를 지정하는 스키마는 '속성 및 네임스페이스 지정을 위한 입력 데이터 형식' 섹션을 참조하세요.

쿼리

  • **{color: red, blue}, {shape: square, circle}**을 지정하는 쿼리는 **(red || blue) && (square || circle)**을 충족하는 모든 데이터베이스 포인트와 일치합니다. 쿼리는 네임스페이스 전체에 AND를 표현하고 각 네임스페이스 내에 OR을 표현합니다.
  • **{color: red}**를 지정하는 쿼리는 **shape**의 제한사항이 없는 모든 유형의 **red** 객체와 일치합니다.

차단 목록

고급 시나리오를 지원하기 위해 Google에서는 차단 목록 토큰이라고 하는 특수한 형식의 부정을 지원합니다. 쿼리가 토큰을 차단 목록에 추가하면 차단 목록에 추가된 토큰이 있는 모든 데이터 포인트와 일치하는 항목이 제외됩니다. 쿼리 네임스페이스에 차단 목록에 추가된 토큰만 있는 경우 명시적으로 차단 목록에 추가되지 않은 모든 포인트는 빈 네임스페이스가 모든 포인트와 정확히 일치하는 동일한 방식으로 일치합니다.

또한 데이터 포인트는 토큰을 차단 목록에 추가하여 해당 토큰을 지정하는 쿼리와 일치하는 항목을 제외할 수 있습니다.

다음은 필터링 기능을 명확히 보여주는 몇 가지 예시입니다. 지정된 토큰으로 다음 데이터 포인트를 정의해 보겠습니다.

  1. {} // 공집합은 모든 항목과 일치합니다.

빨간색

// 'red' 토큰만

파란색

// 'blue' 토큰만

orange

// 'orange' 토큰만

빨간색, 파란색

// 여러 토큰

red, !blue

// 'blue' 토큰 거부

red, blue, !blue

// 독특한 극단적인 사례

!blue

// 거부 전용(공집합과 유사)

대부분의 사용자가 시스템에서 예상하는 직관적인 동작입니다.

  • 빈 쿼리 네임스페이스는 모두 일치 와일드 카드입니다. 예를 들어 Q:{}는 DB:{color:red}와 일치합니다.
  • 빈 데이터 포인트 네임스페이스는 그렇지 않습니다. 예를 들어 Q:{color:red}는 DB:{}와 일치하지 않습니다.

쿼리 및 데이터베이스 포인트를 보여주는 차트

입력 데이터에 네임스페이스 및 토큰 지정

입력 데이터를 전체적으로 구성하는 방법은 입력 데이터 형식 및 구조를 참조하세요.

이 섹션에서는 각 입력 벡터와 연결된 네임스페이스 및 토큰을 지정하는 방법을 설명합니다.

JSON

  • 각 벡터 레코드에 'restricts' 필드를 추가합니다. 이 필드에는 각각 네임스페이스가 될 객체의 배열이 포함되어야 합니다.

    • 각 객체에는 'namespace' 필드가 있어야 합니다. TokenNamespace.namespace입니다.
    • 'allow' 필드 값은(있는 경우) 문자열 배열이어야 합니다. TokenNamespace.string_tokens의 목록입니다.
    • 'deny' 필드 값은(있는 경우) 문자열 배열이어야 합니다. TokenNamespace.string_blacklist_tokens의 목록입니다.

다음은 JSON 형식의 레코드 예시 두 개입니다.

{"id": "42", "embedding": [0.5, 1.0], "restricts": [{"namespace": "class",
"allow": ["cat", "pet"]},{"namespace": "category", "allow": ["feline"]}]}
{"id": "43", "embedding": [0.6, 1.0], "restricts": [{"namespace":
"class", "allow": ["dog", "pet"]},{"namespace": "category", "allow":
["canine"]}]}

Avro

Avro 레코드 구조는 JSON 형식에 정의된 구조와 유사해야 합니다. 특히 다음 스키마를 준수해야 합니다.

{
   "type": "record",
   "name": "FeatureVector",
   "fields": [
      {"name": "id", "type": "string"},
      {"name": "embedding",
       "type": {
          "type": "array",
    "items": "float"
  }
      },
      {"name": "restricts",
       "type": [
         "null",
         {"type": "array",
          "items": {
          "type": "record",
          "name": "Restrict",
          "fields": [
            {"name": "namespace", "type": "string"},
            {"name": "allow", "type": ["null", {"type": "array", "items": "string"}]},
            {"name": "deny", "type": ["null", {"type": "array", "items": "string"}]}]}}]},
      {"name": "crowding_tag", "type": ["null", "string"]}]
}

다음 단계