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).
시작하기 전에
시작하기 전에 다음을 완료했는지 확인하세요.
액세스 가능한 공개 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
Solr 서버의 PostgreSQL 사용자 매핑을 정의합니다. PostgreSQL FDW가 작동하려면 이 사용자 매핑이 필요합니다. AlloyDB는 REST 승인 헤더를 사용하여 인증합니다.
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;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"라는 문구를 검색합니다.