

# 벡터 인덱스 문제 해결
<a name="VectorSearchTroubleshooting"></a>

다음 표에는 벡터 인덱스 작업 시 발생하는 일반적인 문제 및 해결 방법이 나와 있습니다.


| 증상 | 원인 | 해결 방법 | 
| --- | --- | --- | 
| ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH key | 인덱스는 SearchSchema에서 벡터 인덱스 파티션 키(HASH)를 정의하지만 검색에서 값을 제공하지 않았습니다. | SearchConditionExpression에 벡터 인덱스 파티션 키 등식(예: Category = :cat)을 일치하는 ExpressionAttributeValues 항목과 함께 추가합니다. | 
| ValidationException: One element in SearchSchema is not defined in attribute definitions | SearchSchema 속성(벡터 인덱스 파티션 키 또는 인라인 필터)은 테이블의 AttributeDefinitions에서 선언되지 않습니다. | 글로벌 보조 인덱스에 대해 키 속성이 선언되는 것과 동일한 방식으로 모든 SearchSchema 속성을 해당 유형과 함께 AttributeDefinitions에 추가합니다. | 
| ValidationException: Invalid comparator used in SearchConditionExpression | = 이외의 연산자가 사용되었습니다. 현재 벡터 인덱스 파티션 키 및 인라인 필터 속성에는 등식 연산자만 지원됩니다. | =만 사용하도록 조건을 다시 작성합니다. 비교, 범위 및 집합 멤버 연산자는 아직 사용할 수 없습니다. | 
| ValidationException: Provided TopK value is out of valid range | TopK가 1\~100 범위를 벗어났습니다. | TopK를 1\~100 사이의 값(포함)으로 설정합니다. | 
| 인덱스가 백필되는 동안 SearchVectors가 오류를 반환합니다. | 벡터 인덱스가 아직 검색할 준비가 되지 않았습니다. IndexStatus가 CREATING이거나, Backfilling이 true로 설정된 상태에서 IndexStatus가 ACTIVE인 것입니다. 백필이 완료될 때까지는 벡터 인덱스를 검색할 수 없습니다. | DescribeTable을 사용하고 Backfilling이 false가 될 때까지 기다렸다가 검색을 다시 시도합니다. | 
| 벡터가 포함된 항목을 쓸 때 쓰기가 거부됩니다. | 벡터의 차원 수가 인덱스와 맞지 않습니다. | 벡터 길이가 인덱스 Dimensions와 일치하는지 확인합니다. [벡터 데이터로 항목 작성](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Write)을(를) 참조하세요. | 
| '파라미터에 유효하지 않은 유형'으로 쓰기가 거부됩니다. | 벡터 속성의 데이터 유형이 잘못되었습니다. DynamoDB는 32비트 부동 소수점 숫자 목록을 요구합니다. 일반적인 원인에는 문자열(S), 숫자 스칼라(N), 숫자 세트(NS) 또는 숫자가 아닌 요소가 포함된 목록을 전송하는 경우가 포함됩니다. 오류 메시지는 단일 멤버의 유형이 잘못된 경우 문제가 되는 요소 인덱스를 정확히 가리킵니다. | 벡터 속성을 숫자(N) 목록(L)으로 전송합니다. 목록의 모든 요소가 유효한 숫자이고 목록 길이가 인덱스 Dimensions와 일치하는지 확인합니다. | 
| 벡터 인덱스 파티션 키 속성을 제거 또는 생략한 후 SearchVectors가 더 이상 항목을 반환하지 않습니다. | 벡터 인덱스 파티션 키 속성을 항목에서 제거하거나(UpdateItem의 REMOVE 사용) PutItem에서 생략해도 오류가 발생하지 않습니다. 그러나 기본 테이블 항목 및 해당 벡터 임베딩이 여전히 존재하더라도 항목은 아무 알림 없이 인덱스에서 제외되고 검색 결과에 더 이상 표시되지 않습니다. | 검색하려는 모든 항목에 벡터 인덱스 파티션 키 속성이 포함되어 있는지 확인하세요. 검색 결과에서 항목이 예기치 않게 사라지는 경우 해당 파티션 키 속성이 기본 테이블 항목에 여전히 존재하는지 확인합니다. | 
| '빈 문자열 값을 포함할 수 없음' 또는 벡터 인덱스 파티션 키 유형 불일치로 쓰기가 거부됩니다. | 벡터 인덱스 파티션 키 속성이 빈 문자열로 설정되었거나 잘못된 데이터 유형으로 작성되었습니다. 인덱스 키 속성은 비워둘 수 없으며 선언된 유형과 일치해야 하므로 DynamoDB는 이러한 쓰기를 거부합니다. | 벡터 인덱스 파티션 키 속성에 올바른 데이터 유형으로 비어 있지 않은 유효한 값을 사용합니다. 인덱스 정의에서 요구되는 유형을 확인하세요. | 
| 검색 결과에서 속성이 누락되었습니다. | 벡터 인덱스가 해당 속성을 프로젝션하지 않습니다. | 인덱스로 프로젝션된 속성만 검색할 수 있습니다. 추가 속성을 반환하려면 더 넓은 범위의 프로젝션으로 인덱스를 다시 생성하거나 ProjectionType을 ALL로 설정합니다. | 

## 기존 벡터 인덱스에 파티션 키 추가
<a name="VectorSearchTroubleshooting.ChangePartitionKey"></a>

벡터 인덱스의 `SearchSchema`는 생성 시 고정됩니다. 인덱스를 생성한 후에는 파티션 키(`HASH`)를 추가, 제거 또는 변경할 수 없습니다. 인라인 필터 속성도 변경할 수 없습니다. 스키마를 변경하려면 새 인덱스를 생성하여 해당 인덱스로 마이그레이션합니다.

파티션 키를 추가하거나 다른 `SearchSchema` 속성을 변경하려면 다음 단계를 완료합니다.

1. 필요한 파티션 키를 사용하여 새 벡터 인덱스를 생성합니다. `UpdateTable` API를 `VectorIndexUpdates` 파라미터의 `Create` 작업과 함께 사용합니다. 새 인덱스에 다른 이름을 지정합니다. 지침은 [기존 테이블에 벡터 인덱스 추가](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Create.ExistingTable) 섹션을 참조하세요.

1. 새 인덱스에서 백필이 완료될 때까지 기다립니다. `DescribeTable`을 직접적으로 호출하고 `IndexStatus`가 `ACTIVE`이고 `Backfilling`이 `false`인지 확인합니다.

1. 새 인덱스로 `SearchVectors` 요청을 보내도록 애플리케이션을 업데이트합니다. `SearchConditionExpression`에 파티션 키 값을 포함합니다. 자세한 내용은 [SearchConditionExpression을 사용하여 필터링](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Search.Filtering) 섹션을 참조하세요.

1. 올바른 결과를 확인한 후 이전 인덱스를 삭제하여 스토리지 비용 발생을 중단합니다. `UpdateTable` API를 `VectorIndexUpdates` 파라미터의 `Delete` 작업과 함께 사용합니다. 지침은 [벡터 인덱스 삭제](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Delete) 섹션을 참조하세요.

**인덱스 작업은 기본 테이블 데이터에 영향을 주지 않습니다.**  
벡터 인덱스를 생성하거나 삭제해도 기본 테이블 또는 해당 항목에는 영향을 주지 않습니다. DynamoDB는 백필 중에 기본 테이블 항목에서 벡터 데이터를 다시 파생합니다.