É possível acessar e pesquisar dados armazenados no Apache Solr usando a integração de pesquisa externa no AlloyDB Omni.
Limitações
Antes de conectar o AlloyDB ao Solr, reconheça as seguintes limitações:
A integração do Solr está disponível apenas na versão principal
17do PostgreSQL e em versões mais recentes.O AlloyDB lê, mas não grava dados do Solr.
O AlloyDB não indexa automaticamente os dados do banco de dados no Solr. Você é responsável por preencher as coleções do Solr e manter a consistência entre os dados no AlloyDB e os dados indexados no Solr.
O AlloyDB não sincroniza automaticamente os esquemas com o Solr. Se o esquema da sua coleção do Solr mudar, atualize manualmente o esquema da tabela externa correspondente do PostgreSQL.
Ao contrário do Elasticsearch, o Solr não tem campos predefinidos do tipo JSON. É preciso mapear os campos do tipo JSON para strings formatadas em
TEXToujsonb.O Solr exige uma chave exclusiva na expressão de classificação para que a paginação funcione corretamente. Por padrão, o campo
idé usado. É possível especificar um campo personalizado ou uma lista separada por vírgulas de vários campos com as ordens de classificação individuais, por exemplo,myid0 ASC, myid1 DESC, usando a opçãounique_key_sort_suffixao criar a tabela externa.
Antes de começar
Antes de começar, verifique se você concluiu o seguinte:
Adicione a conectividade de IP público de saída à sua instância principal do AlloyDB.
Implante e execute seu cluster do Solr com um URL público acessível.
Armazene suas credenciais do Solr no Secret Manager. Para autenticação básica, o valor do segredo precisa ser uma string codificada em base64 no formato
username:password.Verifique se a conta de serviço usada pelo AlloyDB tem a permissão
secretmanager.secretAccessorpara ler o secret do Secret Manager.
Ativar e configurar a extensão external_search_fdw
Para iniciar a integração com o Solr, configure o acesso ao cluster dele usando um servidor de dados externo.
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'
);
Substitua as seguintes variáveis:
SOLR_SERVER_NAME: nome do servidor de dados externo. Por exemplo,solr.SOLR_SERVER_HOST_PORT: URL público do seu cluster do SOLR. Por exemplo,https://node1.solr.test.com:8983.AUTH_METHOD: tipo de autenticação a ser usada. Por exemplo,Basic.SECRET_PATH: Caminho do Secret Manager para suas credenciais de autenticação do Solr. Por exemplo,projects/123456789012/secrets/apikey/versions/1.123456789012representa o ID do seu projeto Google Cloud .
Defina o mapeamento de usuários do PostgreSQL para o servidor Solr. As FDWs do PostgreSQL exigem esse mapeamento de usuário para funcionar. O AlloyDB faz a autenticação usando o cabeçalho de autorização REST.
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;Mapeie o esquema da sua coleção do Solr para uma tabela externa do 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' );Substitua as seguintes variáveis:
SOLR_FD_TABLE: nome da tabela de dados externa que representa sua tabela do Solr. Por exemplo,my-fd-solr-table.SOLR_FIELDS: uma lista separada por vírgulas em que cada entrada segue o formatosolr_field_name PG_DATA_TYPE. Para uma lista dos tipos de dados do Solr compatíveis e os tipos correspondentes do PostgreSQL, consulte Tipos de dados compatíveis.UNIQUE_KEY_SORT_SUFFIX: (opcional) o campo de chave exclusiva no Solr ou uma lista separada por vírgulas de vários campos com as ordens de classificação deles. Por exemplo,myid0 ASC, myid1 DESC, usado para paginação. O padrão éid.PG_DATA_TYPE: o tipo do PostgreSQL a que você quer mapear. São exemplos comuns:TEXTpara dados de string.INTEGERpara dados numéricos.
SOLR_COLLECTION_NAME: nome da sua coleção do Solr. Por exemplo,my-solr-collection.
Consultar seus dados do Solr
O AlloyDB recebe consultas SQL e as converte em consultas da API REST do Solr.
Para consultar seus dados do Solr, você tem as seguintes opções:
- Consultas SQL padrão
- DSL de consulta
- Pesquisas híbridas
Consultas SQL padrão
É possível usar o SQL padrão com a sintaxe do Lucene para a expressão de pesquisa.
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Substitua as seguintes variáveis:
SOLR_FD_TABLE: nome da tabela de dados externa que representa sua tabela do Solr. Por exemplo,my-fd-solr-table.(Opcional)
FILTER: filtro a ser aplicado à consulta do Solr. Por exemplo,AND qubits < 105.QUERY: consulta a ser enviada ao Solr. Por exemplo,body:database.
DSL de consulta
Para casos de uso avançados, use a DSL de consulta no estilo JSON do Solr.
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
Substitua SOLR_FD_TABLE pelo nome da tabela de dados externa que representa sua tabela do Solr. Por
exemplo, my-fd-solr-table.
Pesquisas híbridas
Para realizar uma pesquisa híbrida nos seus dados do Solr, combine os resultados da pesquisa de token do Solr com os resultados da pesquisa vetorial do 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;
Substitua as seguintes variáveis:
LIMIT: número de resultados a serem retornados. Por exemplo,10.WEIGHT: contribuição desta entrada de pesquisa para a fusão de classificação recíproca (RRF, na sigla em inglês) geral. Por exemplo,0.5.SOLR_FD_TABLE: nome da tabela de dados externa que representa sua tabela do Solr. Por exemplo,my-fd-solr-table.QUERY: consulta a ser enviada ao Solr. Por exemplo,"solr_field_name:\"cloud databases\""pesquisa a frase "bancos de dados na nuvem" no camposolr_field_name.