AlloyDB Omni에서 OpenSearch 데이터에 액세스

문서 버전 선택:

AlloyDB Omni의 외부 검색 통합을 사용하여 OpenSearch에 저장된 데이터에 액세스하고 검색할 수 있습니다. 이 통합을 사용하면 데이터를 복사하거나 이동하지 않고도 기존 OpenSearch 색인과 관계형 테이블에서 통합 검색을 실행할 수 있습니다.

시작하기 전에

시작하기 전에 다음을 완료하세요.

Secret Manager에 OpenSearch 사용자 인증 정보 저장

AlloyDB Omni는 Secret Manager에서 OpenSearch 사용자 인증 정보를 저장하고 읽습니다. 기본 HTTP 인증의 경우 Secret Manager의 보안 비밀 값은 username:password 형식의 문자열이어야 합니다. Secret Manager 사용 방법에 대한 자세한 내용은 Secret Manager를 사용하여 보안 비밀 만들기 및 액세스를 참조하세요.

AlloyDB Omni에서 사용하는 서비스 계정에 Secret Manager에서 보안 비밀을 읽을 수 있는 secretmanager.secretAccessor 권한이 있는지 확인합니다. 자세한 내용은 보안 비밀에 대한 액세스 관리를 참조하세요.

external_search_fdw 확장 프로그램 사용 설정 및 구성

OpenSearch와의 통합을 시작하려면 외부 데이터 서버를 통해 OpenSearch 클러스터에 대한 액세스를 구성합니다.

  1. 데이터베이스에 연결하고 확장 프로그램을 사용 설정합니다.

    CREATE EXTENSION external_search_fdw;
    
  2. 외부 서버를 만듭니다.

    CREATE SERVER OPENSEARCH_SERVER_NAME
    FOREIGN DATA WRAPPER external_search_fdw
    OPTIONS (
      server 'OPENSEARCH_SERVER_HOST_PORT',
      search_provider 'opensearch',
      auth_mode 'secret_manager',
      auth_method 'AUTH_METHOD',
      secret_path 'SECRET_PATH'
    );
    

    다음 변수를 바꿉니다.

    • OPENSEARCH_SERVER_NAME: 외부 데이터 서버의 이름입니다. 예를 들면 opensearch입니다.

    • OPENSEARCH_SERVER_HOST_PORT: OpenSearch 클러스터의 공개 URL입니다. 예를 들면 https://search-my-domain.us-east-1.es.amazonaws.com:443입니다.

    • AUTH_METHOD: 사용할 인증 유형입니다. 예를 들면 Basic입니다.

    • SECRET_PATH: OpenSearch 인증 사용자 인증 정보의 Secret Manager 경로입니다. 예를 들면 projects/PROJECT_ID/secrets/opensearch-credentials/versions/1입니다.

  3. OpenSearch 서버의 사용자 매핑을 정의합니다.

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. OpenSearch 색인의 스키마를 PostgreSQL 외부 테이블에 매핑합니다.

    CREATE FOREIGN TABLE OPENSEARCH_FD_TABLE(
        metadata external_search_fdw_schema.OpaqueMetadata,
        OPENSEARCH_FIELDS)
           SERVER OPENSEARCH_SERVER_NAME
           OPTIONS(
                remote_table_name 'OPENSEARCH_INDEX_NAME'
           );
    

    다음 변수를 바꿉니다.

    • OPENSEARCH_FD_TABLE: OpenSearch 테이블을 나타내는 외부 데이터 테이블의 이름입니다. 예를 들면 my-fd-opensearch-table입니다.

    • OPENSEARCH_FIELDS: 각 항목이 opensearch_field_name PG_DATA_TYPE 형식을 따르는 쉼표로 구분된 목록입니다. 지원되는 OpenSearch 데이터 유형 및 해당 PostgreSQL 유형의 목록은 지원되는 데이터 유형을 참조하세요.

    • OPENSEARCH_INDEX_NAME: OpenSearch 색인의 이름입니다. 예를 들면 my-opensearch-index입니다.

OpenSearch 데이터 쿼리

AlloyDB Omni는 SQL 쿼리를 OpenSearch REST API 쿼리로 변환합니다.

표준 SQL 쿼리

검색 표현식에 Lucene 구문과 함께 표준 SQL을 사용할 수 있습니다.

SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';

다음 변수를 바꿉니다.

  • OPENSEARCH_FD_TABLE: OpenSearch 테이블을 나타내는 외부 데이터 테이블의 이름입니다. 예를 들면 my-fd-opensearch-table입니다.

  • FILTER: (선택사항) OpenSearch 쿼리에 적용할 필터입니다. 예를 들면 a = 10 AND b < 105입니다.

  • QUERY: OpenSearch로 전송할 쿼리입니다. 예를 들면 body:database입니다.

DSL 쿼리

고급 사용 사례의 경우 OpenSearch JSON 스타일 쿼리 도메인 특정 언어 (DSL)를 사용합니다.

SELECT id, title
FROM OPENSEARCH_FD_TABLE
ORDER BY metadata <@> $${
  "query": {
    "bool": {
      "must": { "match": { "title": "opensearch" } },
      "filter": { "term": { "category": "software" } }
    }
  },
  "sort": [
    { "price": { "order": "desc" } }
  ]
}$$
LIMIT 1;

OPENSEARCH_FD_TABLE을 OpenSearch 테이블을 나타내는 외부 데이터 테이블의 이름으로 바꿉니다. 예를 들면 my-fd-opensearch-table입니다.

OpenSearch 데이터에서 하이브리드 검색을 실행하려면 OpenSearch 토큰 검색 결과를 AlloyDB Omni 벡터 검색 결과와 조인합니다.

SELECT *
FROM ai.hybrid_search(
  ARRAY[
    '{"limit": LIMIT,
      "weight": WEIGHT,
      "table_name": "OPENSEARCH_FD_TABLE",
      "key_column": "id",
      "query_text_input": "QUERY"}'::jsonb
  ])
ORDER BY score DESC;

다음 변수를 바꿉니다.

  • LIMIT: 반환할 결과 수입니다. 예를 들면 10입니다.

  • WEIGHT: 전체 상호 순위 융합 (RRF)에 대한 이 검색 항목의 기여도입니다. 예를 들면 0.5입니다. 가중치를 제공하지 않으면 가중치가 균등하게 분배됩니다. 자세한 내용은 하이브리드 검색 함수 매개변수를 참조하세요.

  • OPENSEARCH_FD_TABLE: OpenSearch 테이블을 나타내는 외부 데이터 테이블의 이름입니다. 예를 들면 my-fd-opensearch-table입니다.

  • QUERY: OpenSearch로 전송할 쿼리입니다. 예를 들면 body:database입니다.

문제 해결

OpenSearch 클러스터를 쿼리할 때 인증 또는 연결 문제가 발생하는 경우 다음을 확인하세요.

  • HTTP 401 또는 403 인증 오류: Secret Manager의 OpenSearch 보안 비밀에 username:password 형식의 문자열이 포함되어 있고 서비스 계정에 secretmanager.secretAccessor 권한이 있는지 확인합니다.
  • 연결 시간 초과: AlloyDB Omni와 OpenSearch 엔드포인트 간의 네트워크 규칙 및 방화벽 구성을 확인합니다.

제한사항

  • 읽기 전용: AlloyDB Omni는 OpenSearch 데이터를 읽지만 쓰지는 않습니다.
  • 데이터 관리: AlloyDB Omni는 데이터베이스 데이터를 OpenSearch에 자동으로 색인 생성하지 않습니다. OpenSearch 색인을 채우고 AlloyDB Omni의 데이터와 OpenSearch의 색인 생성된 데이터 간의 일관성을 유지하는 것은 사용자의 책임입니다.
  • 스키마 관리: AlloyDB Omni는 스키마를 OpenSearch와 자동으로 동기화하지 않습니다. OpenSearch 색인 스키마가 변경되면 해당 PostgreSQL 외부 테이블의 스키마를 수동으로 업데이트합니다.
  • 지원되지 않는 유형: 지리 공간 유형과 같은 특수 OpenSearch 유형은 지원되지 않습니다.
  • 인증: OpenSearch 클러스터에서 구성된 기본 인증 (사용자 이름 및 비밀번호)을 사용해야 합니다.

다음 단계