Skip to content

Commit

Permalink
improve query
Browse files Browse the repository at this point in the history
  • Loading branch information
anitacaron committed Nov 17, 2023
1 parent 8330801 commit e2c4d7b
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions src/database/sparql_implementation.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ def default_query(
where=[],
)

# Add Blazegraph optimization query hint
query.where.append(
"""<http://www.bigdata.com/queryHints#Query>
<http://www.bigdata.com/queryHints#optimizer>
'Runtime'"""
)

if subject is None:
subject = "?_x"
else:
Expand All @@ -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
Expand Down Expand Up @@ -318,22 +324,31 @@ 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=[],
)
mappingset_uri = MappingSet.class_class_uri
mapping_uri = Mapping.class_class_uri

# Add Blazegraph optimization query hint
query.where.append(
"""<http://www.bigdata.com/queryHints#Query>
<http://www.bigdata.com/queryHints#optimizer>
'Runtime'"""
)

query.where.append(
f"?mapping_set {self.value_to_sparql(RDF.type)} {self.value_to_sparql(mappingset_uri)}"
)
query.where.append(
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])
Expand Down

0 comments on commit e2c4d7b

Please sign in to comment.