Puedes acceder a los datos almacenados en Apache Solr y buscarlos con la integración de búsqueda externa en AlloyDB Omni.
Limitaciones
Antes de conectar AlloyDB a Solr, ten en cuenta las siguientes limitaciones:
La integración de Solr solo está disponible en la versión principal
17de PostgreSQL y versiones posteriores.AlloyDB lee datos de Solr, pero no escribe en ellos.
AlloyDB no indexa automáticamente los datos de tu base de datos en Solr. Eres responsable de completar tus colecciones de Solr y mantener la coherencia entre los datos de AlloyDB y los datos indexados en Solr.
AlloyDB no sincroniza automáticamente los esquemas con Solr. Si cambia el esquema de la colección de Solr, debes actualizar manualmente el esquema de la tabla externa de PostgreSQL correspondiente.
A diferencia de Elasticsearch, Solr no tiene campos predefinidos con tipo JSON. Debes asignar los campos con tipo JSON a cadenas con formato
TEXTojsonb.Solr requiere una clave única en la expresión de ordenamiento para que la paginación funcione correctamente. De forma predeterminada, se usa el campo
id. Puedes especificar un campo personalizado o una lista separada por comas de varios campos junto con sus órdenes de clasificación individuales, por ejemplo,myid0 ASC, myid1 DESC, con la opciónunique_key_sort_suffixcuando creas la tabla externa.
Antes de comenzar
Antes de comenzar, asegúrate de haber completado los siguientes pasos:
Agrega conectividad de IP pública saliente en tu instancia principal de AlloyDB.
Implementa y ejecuta tu clúster de Solr con una URL accesible orientada al público.
Almacena tus credenciales de Solr en Secret Manager. Para la autenticación básica, el valor del secreto debe ser una cadena codificada en base64 con el formato
username:password.Asegúrate de que la cuenta de servicio que usa AlloyDB tenga el permiso
secretmanager.secretAccessorpara leer el secreto de Secret Manager.
Habilita y configura la extensión external_search_fdw
Para comenzar la integración con Solr, configura el acceso a tu clúster de Solr a través de un servidor de datos externos.
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'
);
Reemplaza las siguientes variables:
SOLR_SERVER_NAME: Nombre de tu servidor de datos externos. Por ejemplo,solr.SOLR_SERVER_HOST_PORT: Es la URL pública de tu clúster de SOLR. Por ejemplo,https://node1.solr.test.com:8983.AUTH_METHOD: Tipo de autenticación que se usará. Por ejemplo,BasicSECRET_PATH: Ruta de Secret Manager a tus credenciales de autenticación de Solr. Por ejemplo:projects/123456789012/secrets/apikey/versions/1123456789012representa el ID de tu proyecto de Google Cloud .
Define la asignación de usuarios de PostgreSQL para el servidor de Solr. Ten en cuenta que los FDW de PostgreSQL requieren esta asignación de usuarios para funcionar. AlloyDB se autentica con el encabezado de autorización de REST.
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;Asigna el esquema de tu colección de Solr a una tabla externa de 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' );Reemplaza las siguientes variables nuevas:
SOLR_FD_TABLE: Es el nombre de la tabla de datos externa que representa tu tabla de Solr. Por ejemplo,my-fd-solr-tableSOLR_FIELDS: Es una lista separada por comas en la que cada entrada sigue el formatosolr_field_name PG_DATA_TYPE. Para obtener una lista de los tipos de datos de Solr admitidos y sus tipos de PostgreSQL correspondientes, consulta Tipos de datos admitidos.UNIQUE_KEY_SORT_SUFFIX: (Opcional) Es el campo de clave único en Solr o una lista separada por comas de varios campos con sus órdenes de clasificación, por ejemplo,myid0 ASC, myid1 DESC, que se usa para la paginación. La configuración predeterminada esid.PG_DATA_TYPE: Es el tipo de PostgreSQL al que deseas asignarlo. A continuación, se muestran algunos ejemplos comunes:TEXTpara datos de cadena.INTEGERpara datos numéricos
SOLR_COLLECTION_NAME: Nombre de tu colección de Solr. Por ejemplo,my-solr-collection
Consulta tus datos de Solr
AlloyDB toma las consultas en SQL y las convierte en consultas de la API de REST de Solr.
Para consultar tus datos de Solr, tienes las siguientes opciones:
- Consultas de SQL estándar
- Lenguaje de consultas específico del dominio
- Búsquedas híbridas
Consultas de SQL estándar
Puedes usar SQL estándar con la sintaxis de Lucene para la expresión de búsqueda.
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Reemplaza las siguientes variables:
SOLR_FD_TABLE: Nombre de la tabla de datos externa que representa tu tabla de Solr. Por ejemplo,my-fd-solr-table.FILTER: Es el filtro que se aplicará a tu búsqueda de Solr (opcional). Por ejemplo,AND qubits < 105QUERY: Es la consulta que se enviará a Solr. Por ejemplo,body:database
Lenguaje de consultas específico del dominio
Para casos de uso avanzados, usa el DSL de consultas de Solr con formato JSON.
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
Reemplaza SOLR_FD_TABLE con el nombre de la tabla de datos externa que representa tu tabla de Solr. Por ejemplo: my-fd-solr-table
Búsquedas híbridas
Para realizar una búsqueda híbrida en tus datos de Solr, combina los resultados de la búsqueda de tokens de Solr con los resultados de la búsqueda de vectores de 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;
Reemplaza las siguientes variables:
LIMIT: Es la cantidad de resultados que se devolverán. Por ejemplo,10WEIGHT: Contribución de esta entrada de búsqueda a la Reciprocal Rank Fusion (RRF) general. Por ejemplo,0.5SOLR_FD_TABLE: Nombre de la tabla de datos externa que representa tu tabla de Solr. Por ejemplo,my-fd-solr-table.QUERY: Es la consulta que se enviará a Solr. Por ejemplo,"solr_field_name:\"cloud databases\""busca la frase "bases de datos en la nube" en el camposolr_field_name.