diff --git a/src/database/sparql_implementation.py b/src/database/sparql_implementation.py index f7f6c0f..8323e38 100644 --- a/src/database/sparql_implementation.py +++ b/src/database/sparql_implementation.py @@ -46,6 +46,13 @@ def default_query( where=[], ) + # Add Blazegraph optimization query hint + query.where.append( + """ + + 'Runtime'""" + ) + if subject is None: subject = "?_x" else: @@ -63,20 +70,19 @@ def default_query( if fields is not None: for field, values in fields.items(): if field == "mapping_set": - filter = self.value_to_sparql(self.get_slot_uri(field)) + filter_value = self.value_to_sparql(self.get_slot_uri(field)) if inverse: - query.where.append(f"OPTIONAL {{ ?{field} {filter} {subject} }}") + query.where.append(f"OPTIONAL {{ ?{field} {filter_value} {subject} }}") continue if field == "confidence": - filter = self.value_to_sparql(self.get_slot_uri(field)) query.add_filter( f'STR(?{field}) >= "{values["min"]}" && STR(?{field}) <= "{values["max"]}"' ) continue if values is not None: - values = list(map(lambda x: self.value_to_sparql(x), values)) + values = [self.value_to_sparql(x) for x in values] query.add_filter(f'?{field} IN ( {", ".join(values)})') return query @@ -318,7 +324,6 @@ def get_stats(self) -> dict: (COUNT(DISTINCT ?mapping) as ?nb_mapping) (COUNT(DISTINCT ?mapping_set) as ?nb_mapping_set) (COUNT(DISTINCT ?mapping_provider) as ?nb_mapping_provider) - (COUNT(DISTINCT ?entity) as ?nb_entity) """ ], where=[], @@ -326,6 +331,13 @@ def get_stats(self) -> dict: mappingset_uri = MappingSet.class_class_uri mapping_uri = Mapping.class_class_uri + # Add Blazegraph optimization query hint + query.where.append( + """ + + 'Runtime'""" + ) + query.where.append( f"?mapping_set {self.value_to_sparql(RDF.type)} {self.value_to_sparql(mappingset_uri)}" ) @@ -333,7 +345,10 @@ def get_stats(self) -> dict: f"?mapping {self.value_to_sparql(RDF.type)} {self.value_to_sparql(mapping_uri)}" ) query.where.append( - f"?_x {self.value_to_sparql(self.get_slot_uri('mapping_provider'))} ?mapping_provider" + f""" + OPTIONAL {{ + ?_x {self.value_to_sparql(self.get_slot_uri('mapping_provider'))} ?mapping_provider . + }}""" ) bindings = self._sparql_query(query) results = self.transform_result(bindings[0])