Acessar dados do Solr no AlloyDB para PostgreSQL

É 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 17 do 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 TEXT ou jsonb.

  • 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ção unique_key_sort_suffix ao 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.secretAccessor para 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. 123456789012 representa o ID do seu projeto Google Cloud .

  1. 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;
    
  2. 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 formato solr_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:

      • TEXT para dados de string.
      • INTEGER para 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.

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 campo solr_field_name.