BR-ACC’s Neo4j database is optimized with indexes and constraints to ensure fast query performance. This guide shows how to leverage these optimizations.
Constraints ensure data integrity and automatically create indexes:
Core Entities
Specialized Entities
Extended Data
// Person uniquenessCREATE CONSTRAINT person_cpf_unique IF NOT EXISTS FOR (p:Person) REQUIRE p.cpf IS UNIQUE;// Partner uniquenessCREATE CONSTRAINT partner_id_unique IF NOT EXISTS FOR (p:Partner) REQUIRE p.partner_id IS UNIQUE;// Company uniquenessCREATE CONSTRAINT company_cnpj_unique IF NOT EXISTS FOR (c:Company) REQUIRE c.cnpj IS UNIQUE;// Contract uniquenessCREATE CONSTRAINT contract_contract_id_unique IF NOT EXISTS FOR (c:Contract) REQUIRE c.contract_id IS UNIQUE;// Sanction uniquenessCREATE CONSTRAINT sanction_sanction_id_unique IF NOT EXISTS FOR (s:Sanction) REQUIRE s.sanction_id IS UNIQUE;
// Public officeCREATE CONSTRAINT public_office_id_unique IF NOT EXISTS FOR (po:PublicOffice) REQUIRE po.office_id IS UNIQUE;// AmendmentCREATE CONSTRAINT amendment_id_unique IF NOT EXISTS FOR (a:Amendment) REQUIRE a.amendment_id IS UNIQUE;// Health facilityCREATE CONSTRAINT health_cnes_code_unique IF NOT EXISTS FOR (h:Health) REQUIRE h.cnes_code IS UNIQUE;// FinanceCREATE CONSTRAINT finance_id_unique IF NOT EXISTS FOR (f:Finance) REQUIRE f.finance_id IS UNIQUE;// EmbargoCREATE CONSTRAINT embargo_id_unique IF NOT EXISTS FOR (e:Embargo) REQUIRE e.embargo_id IS UNIQUE;// EducationCREATE CONSTRAINT education_school_id_unique IF NOT EXISTS FOR (e:Education) REQUIRE e.school_id IS UNIQUE;// ConvenioCREATE CONSTRAINT convenio_id_unique IF NOT EXISTS FOR (c:Convenio) REQUIRE c.convenio_id IS UNIQUE;// Labor statisticsCREATE CONSTRAINT laborstats_id_unique IF NOT EXISTS FOR (l:LaborStats) REQUIRE l.stats_id IS UNIQUE;
// InquiryCREATE CONSTRAINT inquiry_id_unique IF NOT EXISTS FOR (i:Inquiry) REQUIRE i.inquiry_id IS UNIQUE;// Municipal bidCREATE CONSTRAINT municipal_bid_id_unique IF NOT EXISTS FOR (b:MunicipalBid) REQUIRE b.municipal_bid_id IS UNIQUE;// Municipal contractCREATE CONSTRAINT municipal_contract_id_unique IF NOT EXISTS FOR (c:MunicipalContract) REQUIRE c.municipal_contract_id IS UNIQUE;// Judicial caseCREATE CONSTRAINT judicial_case_id_unique IF NOT EXISTS FOR (j:JudicialCase) REQUIRE j.judicial_case_id IS UNIQUE;// Source documentCREATE CONSTRAINT source_document_id_unique IF NOT EXISTS FOR (s:SourceDocument) REQUIRE s.doc_id IS UNIQUE;// Ingestion runCREATE CONSTRAINT ingestion_run_id_unique IF NOT EXISTS FOR (r:IngestionRun) REQUIRE r.run_id IS UNIQUE;
Uniqueness constraints automatically create an index, so you don’t need separate index creation for these properties.
// Name searchCREATE INDEX person_name IF NOT EXISTS FOR (p:Person) ON (p.name);// Partial CPF matchingCREATE INDEX person_cpf_middle6 IF NOT EXISTS FOR (p:Person) ON (p.cpf_middle6);CREATE INDEX person_cpf_partial IF NOT EXISTS FOR (p:Person) ON (p.cpf_partial);// Electoral dataCREATE INDEX person_sq_candidato IF NOT EXISTS FOR (p:Person) ON (p.sq_candidato);// Author key for amendmentsCREATE INDEX person_author_key IF NOT EXISTS FOR (p:Person) ON (p.author_key);// Public servant IDCREATE INDEX person_servidor_id IF NOT EXISTS FOR (p:Person) ON (p.servidor_id);
CREATE INDEX partner_name IF NOT EXISTS FOR (p:Partner) ON (p.name);CREATE INDEX partner_doc_partial IF NOT EXISTS FOR (p:Partner) ON (p.doc_partial);// Composite index for combined lookupsCREATE INDEX partner_name_doc_partial IF NOT EXISTS FOR (p:Partner) ON (p.name, p.doc_partial);
// Company nameCREATE INDEX company_razao_social IF NOT EXISTS FOR (c:Company) ON (c.razao_social);// Economic sectorCREATE INDEX company_cnae_principal IF NOT EXISTS FOR (c:Company) ON (c.cnae_principal);
// Contract value for aggregationsCREATE INDEX contract_value IF NOT EXISTS FOR (c:Contract) ON (c.value);// Contract date for temporal queriesCREATE INDEX contract_date IF NOT EXISTS FOR (c:Contract) ON (c.date);// Contracting organizationCREATE INDEX contract_contracting_org IF NOT EXISTS FOR (c:Contract) ON (c.contracting_org);// Contract description/objectCREATE INDEX contract_object IF NOT EXISTS FOR (c:Contract) ON (c.object);
// Sanction typeCREATE INDEX sanction_type IF NOT EXISTS FOR (s:Sanction) ON (s.type);// Sanction start dateCREATE INDEX sanction_date_start IF NOT EXISTS FOR (s:Sanction) ON (s.date_start);
// Election yearCREATE INDEX election_year IF NOT EXISTS FOR (e:Election) ON (e.year);// Composite index for detailed election queriesCREATE INDEX election_composite IF NOT EXISTS FOR (e:Election) ON (e.year, e.cargo, e.uf, e.municipio);
CREATE INDEX amendment_function IF NOT EXISTS FOR (a:Amendment) ON (a.function);CREATE INDEX amendment_value_committed IF NOT EXISTS FOR (a:Amendment) ON (a.value_committed);
CREATE INDEX finance_type IF NOT EXISTS FOR (f:Finance) ON (f.type);CREATE INDEX finance_value IF NOT EXISTS FOR (f:Finance) ON (f.value);CREATE INDEX finance_date IF NOT EXISTS FOR (f:Finance) ON (f.date);CREATE INDEX finance_source IF NOT EXISTS FOR (f:Finance) ON (f.source);
CREATE INDEX health_name IF NOT EXISTS FOR (h:Health) ON (h.name);CREATE INDEX health_uf IF NOT EXISTS FOR (h:Health) ON (h.uf);CREATE INDEX health_municipio IF NOT EXISTS FOR (h:Health) ON (h.municipio);CREATE INDEX health_atende_sus IF NOT EXISTS FOR (h:Health) ON (h.atende_sus);
// Partnership snapshot membershipCREATE INDEX socio_snapshot_membership_id IF NOT EXISTS FOR ()-[r:SOCIO_DE_SNAPSHOT]-() ON (r.membership_id);// Partnership snapshot dateCREATE INDEX socio_snapshot_date IF NOT EXISTS FOR ()-[r:SOCIO_DE_SNAPSHOT]-() ON (r.snapshot_date);
MATCH (c:Company)WHERE c.cnpj = $cnpjCALL { WITH c MATCH (c)-[:VENCEU]->(ct:Contract) RETURN sum(ct.value) AS total_contracts}CALL { WITH c MATCH (c)-[:SANCIONADA]->(s:Sanction) RETURN count(s) AS total_sanctions}RETURN c, total_contracts, total_sanctions
CALL subqueries isolate aggregations and can improve query plan efficiency