AlloyDB Omni에서 Apache Solr 데이터에 액세스

문서 버전을 선택합니다.

AlloyDB Omni의 외부 검색 통합을 사용하여 Apache Solr에 저장된 데이터에 액세스하고 검색할 수 있습니다. 이 통합을 사용하면 집약적인 전체 텍스트 검색, 복잡한 쿼리 파싱, 고급 패싯 워크로드를 운영 데이터베이스에서 Solr로 오프로드하여 쿼리 지연 시간과 전반적인 시스템 처리량을 개선할 수 있습니다.

시작하기 전에

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

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

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

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

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

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

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

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

    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/PROJECT_ID/secrets/apikey/versions/1입니다.

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

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER SOLR_SERVER_NAME;
    
  4. 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 Omni는 SQL 쿼리를 Solr REST API 쿼리로 변환합니다.

표준 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 Omni 벡터 검색 결과와 결합하세요.

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에 전송할 쿼리입니다. 예를 들면 body:database입니다.

문제 해결

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

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

제한사항

  • 읽기 전용: AlloyDB Omni는 Solr 데이터를 읽지만 쓰지는 않습니다.
  • 데이터 관리: AlloyDB Omni는 데이터베이스 데이터를 Solr에 자동으로 색인화하지 않습니다. Solr 컬렉션을 채우고 AlloyDB Omni의 데이터와 Solr의 색인 데이터 간의 일관성을 유지할 책임은 사용자에게 있습니다.
  • 스키마 관리: AlloyDB Omni는 스키마를 Solr와 자동으로 동기화하지 않습니다. Solr 컬렉션 스키마가 변경되면 해당 PostgreSQL 외부 테이블의 스키마를 수동으로 업데이트합니다.
  • 지원되지 않는 유형: 지리 공간 유형과 같은 특수 Solr 유형은 지원되지 않습니다.
  • 안정적인 정렬: 페이지로 나누기가 올바르게 작동하려면 Solr에 정렬 표현식의 고유 키가 필요합니다. 기본적으로 id 필드가 사용됩니다. 커스텀 필드 또는 개별 정렬 순서와 함께 여러 필드의 쉼표로 구분된 목록을 지정하려면 외부 테이블을 만들 때 unique_key_sort_suffix 옵션을 사용하세요. 예를 들어 myid0 ASC, myid1 DESC를 지정합니다.

다음 단계