🔍 Integració d'Elasticsearch i Catàlegs Externs a StarRocks
Aquest document detalla la configuració del motor de cerca de text complet i la seva federació amb el clúster OLAP per permetre cerques híbrides i semàntiques a DiscoveryPlus.
1. Desplegament d'Elasticsearch (Podman)
Elasticsearch s'executa com un node únic (es01) en un contenidor Podman directament al host ymir.uab.cat.
- Imatge:
docker.elastic.co/elasticsearch/elasticsearch:8.17.3 - Recursos: Assignació de 32GB de RAM (flag
-m 32GB), optimitzat per indexar els grans volums de text de PATSTAT sense necessitat de clúster. - Xarxa: El port intern
9200està mapejat al port8008de l'host. - IP Interna (Bridge):
10.89.1.2(Xarxa:elastic).
2. Flux d'Ingesta de Dades (Logstash)
La càrrega dels resums de patents es realitza mitjançant Logstash. El procés llegeix els fitxers CSV originals de l'EPO i els injecta a Elasticsearch.
Configuració del Pipeline (carga-abstracts2025b.conf):
- Input: Fitxers CSV a
/dades/downloads/patstat25b/tls203*.csv. - Filtre (CSV): Mapatge de les columnes
appln_id,appln_abstract_lgiappln_abstract. - Output: Enviament de dades al host
http://ymir.uab.cat:8008cap a l'índexabstracts25bb.
3. Definició dels Catàlegs Externs a StarRocks
L'arquitectura utilitza els "External Catalogs" de StarRocks per consultar Elasticsearch mitjançant SQL estàndard. Això permet que el sistema "vegi" els índexs de text com a taules federades.
Creació del Catàleg d'Abstracts (create-catalog-elastic.sh)
CREATE EXTERNAL CATALOG elastic_abstracts
COMMENT 'elastic abstracts of patstat'
PROPERTIES (
"type" = "es",
"hosts" = "http://ymir.uab.cat:8008",
"es.net.ssl" = "false",
"user" = "elastic",
"password" = ""
);
Actualment, el sistema està segmentat en tres catàlegs especialitzats:
- elastic_abstracts: Per a cerques sobre el resum de la patent (Índex: abstracts25bb).
- elastic_titles: Per a cerques ràpides sobre el títol de la patent.
- elastic_persons: Per a cerques de noms d'inventors o empreses (Cerca fuzzy).
4. Orquestració del Backend: FastAPI + SQLAlchemy
A DiscoveryPlus, tota la lògica de cerca es centralitza a través de StarRocks, simplificant enormement el codi del backend:
- FastAPI: Rep els paràmetres de cerca de l'investigador (paraules clau, filtres booleans o entrada de LLM).
- SQLAlchemy: El backend de Python utilitza SQLAlchemy per generar consultes SQL que fan un JOIN entre les taules natives de StarRocks (metadades) i els catàlegs externs (elastic_abstracts).
- Execució Federada: StarRocks s'encarrega de demanar els resultats per rellevància a Elasticsearch i els retorna al backend ja creuats amb tota la informació relacional de PATSTAT en un sol JSON.
🛠️ Manteniment i Cicles d'Actualització (PATSTAT)
Aquest document descriu les tasques recurrents i els procediments per a l'actualització semestral de les dades de patents a l'entorn ymir.uab.cat.
1. Estratègia d'Immutabilitat del Codi (Elasticsearch Aliases)
Per evitar haver de modificar el codi SQL o la configuració dels catàlegs a StarRocks cada sis mesos, s'utilitza una capa d'abstracció mitjançant Àlies.
-
Lògica: El codi SQLAlchemy sempre apunta a un identificador genèric (ex: abstracts_alias).
-
Rotació: Quan es genera un nou índex (ex: abstracts2026a), es desassigna l'àlies de l'índex antic i s'assigna al nou en una sola operació atòmica.
Comanda de rotació (Exemple):
curl -X POST "localhost:8008/_aliases" -H 'Content-Type: application/json' -d'
{
"actions": [
{ "remove": { "index": "abstracts2025b", "alias": "abstracts" } },
{ "add": { "index": "abstracts2026a", "alias": "abstracts" } }
]
}'
2. Calendari d'Actualització Semestral
-
Descàrrega: Baixada dels CSV a /dades/downloads/patstat<any><versió>/.
-
Indexació: Execució del pipeline de Logstash cap a un índex nou (ex: abstracts2026a).
-
Verificació: Comprovar que el recompte de documents és correcte.
-
Swap d'Àlies: Executar la rotació de l'àlies per fer les dades visibles a DiscoveryPlus instantàniament.
-
Ingesta StarRocks: Actualització de les taules OLAP (PATSTAT i KRAKEN via CDC).
3. Sanejament i Salut del Clúster
Per evitar problemes d'ocupació de disc i garantir el rendiment:
A. Monitorització de l'Espai (qcow2) Abans de cada gran càrrega, comprovar l'estat dels nodes:
SHOW BACKENDS;
Si un node supera el 80% d'ocupació (UsedPct), cal ampliar el disc virtual o netejar fitxers orfes.
B. Gestió del "Trash" i Compactació StarRocks neteja segments vells cada 24h per defecte. En períodes d'actualització massiva, podem forçar la purga:
ADMIN SET FRONTEND CONFIG ("trash_file_expire_time_sec" = "3600");
4. Monitorització de l'Aplicació (FastAPI + SQLAlchemy)
Latència de Consulta: Si les cerques triguen, verificar l'estat de les Materialized Views.
Logs d'Error: Vigilar els logs del contenidor Elasticsearch (podman logs es01) per detectar si la JVM de 32GB necessita un ajust del Heap Size.
Document: ELASTICSEARCH_INTEGRATION.md
Projecte: ymir.uab.cat
Data de revisió: Març 2026