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

AlloyDB Omni의 외부 검색 통합을 사용하여 Apache 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).

시작하기 전에

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

  • 기본 AlloyDB 인스턴스에 아웃바운드 공개 IP 연결을 추가합니다.

  • 액세스 가능한 공개 URL로 Solr 클러스터를 배포하고 실행합니다.

  • Secret Manager에 Solr 사용자 인증 정보를 저장합니다. 기본 인증의 경우 보안 비밀의 값은 username:password 형식의 base64로 인코딩된 문자열이어야 합니다.

  • AlloyDB에서 사용하는 서비스 계정에 Secret Manager에서 보안 비밀을 읽을 수 있는 secretmanager.secretAccessor 권한이 있는지 확인합니다.

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 는 프로젝트 ID를 나타냅니다. Google Cloud

  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 쿼리
  • 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입니다.

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 필드에서 "cloud databases"라는 문구를 검색합니다.