PostgreSQL용 AlloyDB에서 Solr 데이터에 액세스

PostgreSQL용 AlloyDB의 외부 검색 통합을 사용하여 Apache Solr에 저장된 데이터에 액세스하고 검색할 수 있습니다.

시작하기 전에

시작하기 전에 다음 작업을 완료했는지 확인하세요.

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

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

AlloyDB 서비스 계정에 Secret Manager에서 보안 비밀을 읽을 수 있는 Secret Manager 보안 비밀 접근자 (roles/secretmanager.secretAccessor) 역할이 있는지 확인합니다. 자세한 내용은 Secret Manager를 사용하여 보안 비밀 만들기 및 액세스를 참고하세요.

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

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

CREATE EXTENSION external_search_fdw;

CREATE SERVER SOLR_SERVER_NAME
FOREIGN DATA WRAPPER external_search_fdw
OPTIONS (
  server 'SOLR_SERVER_HOST_PORT',
  search_provider 'solr',
  auth_mode 'secret_manager',
  auth_method 'AUTH_METHOD',
  secret_path 'SECRET_PATH'
);

다음 변수를 바꿉니다.

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

  • SOLR_SERVER_HOST_PORT: SOLR 클러스터의 공개 URL입니다. 예를 들면 https://node1.solr.test.com:8983입니다.

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

  • SECRET_PATH: Solr 인증 사용자 인증 정보의 Secret Manager 경로입니다. 예를 들면 projects/123456789012/secrets/apikey/versions/1입니다. 123456789012는 Google Cloud 프로젝트 ID를 나타냅니다.

  1. Solr 서버의 PostgreSQL 사용자 매핑을 정의합니다. PostgreSQL FDW가 작동하려면 이 사용자 매핑이 필요합니다. AlloyDB는 REST 승인 헤더를 사용하여 인증합니다.

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER SOLR_SERVER_NAME;
    
  2. Solr 컬렉션의 스키마를 PostgreSQL 외부 테이블에 매핑합니다.

    CREATE FOREIGN TABLE SOLR_FD_TABLE(
        metadata external_search_fdw_schema.OpaqueMetadata,
        SOLR_FIELDS)
           SERVER SOLR_SERVER_NAME
           OPTIONS(
                remote_table_name 'SOLR_COLLECTION_NAME'
                unique_key_sort_suffix 'UNIQUE_KEY_SORT_SUFFIX'
           );
    

    다음 새 변수를 바꿉니다.

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

    • SOLR_FIELDS: 각 항목이 solr_field_name PG_DATA_TYPE 형식을 따르는 쉼표로 구분된 목록입니다. 지원되는 Solr 데이터 유형과 해당 PostgreSQL 유형의 목록은 지원되는 데이터 유형을 참고하세요.

    • UNIQUE_KEY_SORT_SUFFIX: (선택사항) Solr의 고유 키 필드 또는 페이지로 나누기에 사용되는 정렬 순서가 있는 여러 필드의 쉼표로 구분된 목록입니다(예: myid0 ASC, myid1 DESC). 기본값은 id입니다.

    • PG_DATA_TYPE: 매핑할 PostgreSQL 유형입니다. 일반적인 예시는 다음과 같습니다.

      • TEXT를 사용합니다.
      • INTEGER를 사용합니다.
    • SOLR_COLLECTION_NAME: Solr 컬렉션의 이름입니다. 예를 들면 my-solr-collection입니다.

Solr 데이터 쿼리

AlloyDB는 SQL 쿼리를 가져와 Solr REST API 쿼리로 변환합니다.

Solr 데이터를 쿼리하려면 다음 옵션을 사용하세요.

  • 표준 SQL 쿼리
  • Query DSL
  • 하이브리드 검색

표준 SQL 쿼리

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

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

다음 변수를 바꿉니다.

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

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

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

Query DSL

고급 사용 사례의 경우 Solr JSON 스타일 쿼리 DSL을 사용하세요.

SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
  "query": "title:solr",
  "filter": ["category:software", "inStock:true"],
  "sort": "price desc"
}$$
LIMIT 1;

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

Solr 데이터에서 하이브리드 검색을 실행하려면 Solr 토큰 검색 결과를 AlloyDB 벡터 검색 결과와 결합하세요.

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

다음 변수를 바꿉니다.

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

  • WEIGHT: 전체 상호 순위 융합 (RRF)에 대한 이 검색 항목의 기여도입니다. 예를 들면 0.5입니다.

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

  • QUERY: Solr에 전송할 쿼리입니다. 예를 들어 "solr_field_name:\"cloud databases\""solr_field_name 필드에서 '클라우드 데이터베이스'라는 문구를 검색합니다.

문제 해결

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

  • HTTP 401 또는 403 인증 오류: Secret Manager의 Solr 보안 비밀에 username:password 형식의 base64로 인코딩된 문자열이 포함되어 있고 AlloyDB에서 사용하는 서비스 계정에 secretmanager.secretAccessor 권한이 있는지 확인합니다.
  • 연결 시간 초과: 기본 AlloyDB 인스턴스에서 아웃바운드 공개 IP 연결이 사용 설정되어 있고 Solr 방화벽에서 지정된 포트의 인바운드 연결이 허용되는지 확인합니다.

제한사항

AlloyDB를 Solr에 연결하기 전에 다음 제한사항을 확인하세요.

  • Solr 통합은 PostgreSQL 메이저 버전 17 이상에서만 사용할 수 있습니다.

  • AlloyDB는 Solr 데이터를 읽지만 쓰지는 않습니다.

  • AlloyDB는 데이터베이스 데이터를 Solr에 자동으로 색인화하지 않습니다. Solr 컬렉션을 채우고 AlloyDB의 데이터와 Solr의 색인 데이터 간의 일관성을 유지할 책임은 사용자에게 있습니다.

  • AlloyDB는 스키마를 Solr와 자동으로 동기화하지 않습니다. Solr 컬렉션 스키마가 변경되면 해당 PostgreSQL 외부 테이블의 스키마를 수동으로 업데이트해야 합니다.

  • Elasticsearch와 달리 Solr에는 사전 정의된 JSON 유형 필드가 없습니다. JSON 형식 필드를 TEXT 또는 jsonb 형식 문자열에 매핑해야 합니다.

  • Solr에서는 페이지로 나누기가 올바르게 작동하려면 정렬 표현식에 고유한 키가 필요합니다. 기본적으로 id 필드가 사용됩니다. 외래 테이블을 만들 때 unique_key_sort_suffix 옵션을 사용하여 맞춤 필드 또는 여러 필드의 쉼표로 구분된 목록과 각 필드의 정렬 순서(예: myid0 ASC, myid1 DESC)를 지정할 수 있습니다.

다음 단계