Skip to content

Commit

Permalink
Use Fuseki+Lucene/Virtuoso text index in faceted views
Browse files Browse the repository at this point in the history
  • Loading branch information
rogargon committed Sep 22, 2022
1 parent 0fb9934 commit edbc2e5
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 53 deletions.
30 changes: 18 additions & 12 deletions src/main/java/net/rhizomik/rhizomer/service/AnalizeDataset.java
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,10 @@ public List<Value> retrieveRangeValues(Dataset dataset, Range facetRange,
List<Value> rangeValues = new ArrayList<>();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
ResultSet result = sparqlService.querySelect(endPoint.getQueryEndPoint(), endPoint.getTimeout(),
queries(dataset).getQueryFacetRangeValues(classUri.toString(), facetUri.toString(),
facetRange.getUri().toString(), filters, facetRange.getAllLiteral(),
size, size * page, true), endPoint.getGraphs(), endPoint.getOntologyGraphs(),
queries(dataset).getQueryFacetRangeValues(endPoint.getType(), classUri.toString(),
facetUri.toString(), facetRange.getUri().toString(), filters, facetRange.getAllLiteral(),
size, size * page, true),
endPoint.getGraphs(), endPoint.getOntologyGraphs(),
withCreds(endPoint.getQueryUsername(), endPoint.getQueryPassword()));
while (result.hasNext()) {
QuerySolution soln = result.nextSolution();
Expand Down Expand Up @@ -218,8 +219,9 @@ public List<Value> retrieveRangeValuesContaining(Dataset dataset, Range facetRan
List<Value> rangeValues = new ArrayList<>();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
ResultSet result = sparqlService.querySelect(endPoint.getQueryEndPoint(), endPoint.getTimeout(),
queries(dataset).getQueryFacetRangeValuesContaining(classUri.toString(), facetUri.toString(),
facetRange.getUri().toString(), filters, facetRange.getAllLiteral(), containing, top, lang),
queries(dataset).getQueryFacetRangeValuesContaining(
endPoint.getType(), classUri.toString(), facetUri.toString(),
facetRange.getUri().toString(), filters, facetRange.getAllLiteral(), containing, top, lang),
endPoint.getGraphs(), withCreds(endPoint.getQueryUsername(), endPoint.getQueryPassword()));
while (result.hasNext()) {
QuerySolution soln = result.nextSolution();
Expand Down Expand Up @@ -253,8 +255,9 @@ public Range retrieveRangeMinMax(Dataset dataset, Range facetRange,
URI facetUri = facetRange.getFacet().getUri();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
ResultSet result = sparqlService.querySelect(endPoint.getQueryEndPoint(), endPoint.getTimeout(),
queries(dataset).getQueryFacetRangeMinMax(classUri.toString(), facetUri.toString(),
facetRange.getUri().toString(), filters), endPoint.getGraphs(), endPoint.getOntologyGraphs(),
queries(dataset).getQueryFacetRangeMinMax(endPoint.getType(), classUri.toString(), facetUri.toString(),
facetRange.getUri().toString(), filters),
endPoint.getGraphs(), endPoint.getOntologyGraphs(),
withCreds(endPoint.getQueryUsername(), endPoint.getQueryPassword()));
while (result.hasNext()) {
QuerySolution soln = result.nextSolution();
Expand Down Expand Up @@ -291,8 +294,9 @@ public void retrieveClassDescriptions(OutputStream out, Dataset dataset, Class d
URI classUri = datasetClass.getUri();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
Model model = sparqlService.queryDescribe(endPoint, endPoint.getTimeout(),
queries(dataset).getQueryClassDescriptions(classUri.toString(), filters, size,size * page),
endPoint.getGraphs(), withCreds(endPoint.getQueryUsername(), endPoint.getQueryPassword()));
queries(dataset).getQueryClassDescriptions(endPoint.getType(), classUri.toString(),
filters, size,size * page),
endPoint.getGraphs(), withCreds(endPoint.getQueryUsername(), endPoint.getQueryPassword()));
RDFDataMgr.write(out, model, format);
});
}
Expand All @@ -302,7 +306,8 @@ public void retrieveClassInstances(OutputStream out, Dataset dataset, Class data
URI classUri = datasetClass.getUri();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
Model model = sparqlService.queryConstruct(endPoint, endPoint.getTimeout(),
queries(dataset).getQueryClassInstances(classUri.toString(), filters, size,size * page),
queries(dataset).getQueryClassInstances(endPoint.getType(), classUri.toString(),
filters, size,size * page),
endPoint.getGraphs(), endPoint.getOntologyGraphs(), withCreds(endPoint.getQueryUsername(),
endPoint.getQueryPassword()));
RDFDataMgr.write(out, model, format);
Expand Down Expand Up @@ -373,7 +378,8 @@ public void getLinkedResourcesLabels(OutputStream out, Dataset dataset, Class da
URI classUri = datasetClass.getUri();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
Model model = sparqlService.queryConstruct(endPoint, endPoint.getTimeout(),
queries(dataset).getQueryClassInstancesLabels(classUri.toString(), filters, size,size * page),
queries(dataset).getQueryClassInstancesLabels(endPoint.getType(), classUri.toString(),
filters, size,size * page),
endPoint.getGraphs(), endPoint.getOntologyGraphs(), withCreds(endPoint.getQueryUsername(),
endPoint.getQueryPassword()));
RDFDataMgr.write(out, model, format);
Expand All @@ -385,7 +391,7 @@ public int retrieveClassInstancesCount(Dataset dataset, Class datasetClass, Mult
AtomicInteger count = new AtomicInteger();
endPointRepository.findByDataset(dataset).forEach(endPoint -> {
ResultSet result = sparqlService.querySelect(endPoint.getQueryEndPoint(), endPoint.getTimeout(),
queries(dataset).getQueryClassInstancesCount(classUri.toString(), filters),
queries(dataset).getQueryClassInstancesCount(endPoint.getType(), classUri.toString(), filters),
endPoint.getGraphs(), withCreds(endPoint.getQueryUsername(), endPoint.getQueryPassword()));
while (result.hasNext()) {
QuerySolution soln = result.nextSolution();
Expand Down
29 changes: 16 additions & 13 deletions src/main/java/net/rhizomik/rhizomer/service/DetailedQueries.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.rhizomik.rhizomer.service;

import net.rhizomik.rhizomer.model.SPARQLEndPoint;
import org.apache.jena.query.ParameterizedSparqlString;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryFactory;
Expand Down Expand Up @@ -55,8 +56,9 @@ public Query getQueryClassFacets(String classUri) {
}

@Override
public Query getQueryFacetRangeValues(String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters, boolean isLiteral, int limit, int offset, boolean ordered) {
public Query getQueryFacetRangeValues(
SPARQLEndPoint.ServerType serverType, String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters, boolean isLiteral, int limit, int offset, boolean ordered) {
ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
pQuery.setCommandText(prefixes +
"SELECT ?value ?count (GROUP_CONCAT(?langLabel; SEPARATOR = \" || \") AS ?label) \n" +
Expand All @@ -66,7 +68,7 @@ public Query getQueryFacetRangeValues(String classUri, String facetUri, String r
"\t\t { SELECT DISTINCT ?instance " +
"\t\t\t WHERE { \n" +
"\t\t\t\t ?instance a ?class . \n" +
getFilterPatternsAnd(filters) +
getFilterPatternsAnd(serverType, filters) +
"\t\t\t } \n" +
"\t\t } \n" +
"\t\t ?instance ?property ?resource . \n" +
Expand All @@ -90,16 +92,17 @@ public Query getQueryFacetRangeValues(String classUri, String facetUri, String r
}

@Override
public Query getQueryFacetRangeValuesContaining(String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters, boolean isLiteral, String containing, int top, String lang) {
public Query getQueryFacetRangeValuesContaining(
SPARQLEndPoint.ServerType serverType, String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters, boolean isLiteral, String containing, int top, String lang) {
ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
pQuery.setCommandText(prefixes +
"SELECT DISTINCT ?value ?label \n" +
"WHERE { \n" +
"\t { SELECT DISTINCT ?instance " +
"\t\t WHERE { \n" +
"\t\t\t ?instance a ?class . \n" +
getFilterPatternsAnd(filters) +
getFilterPatternsAnd(serverType, filters) +
"\t\t } \n" +
"\t } \n" +
"\t ?instance ?property ?resource . \n" +
Expand All @@ -123,14 +126,15 @@ public Query getQueryFacetRangeValuesContaining(String classUri, String facetUri
}

@Override
public Query getQueryFacetRangeMinMax(String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters) {
public Query getQueryFacetRangeMinMax(
SPARQLEndPoint.ServerType serverType, String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters) {
ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
pQuery.setCommandText(prefixes +
"SELECT (MIN(?num) AS ?min) (MAX(?num) AS ?max) \n" +
"WHERE { \n" +
"\t ?instance a ?class . \n" +
getFilterPatternsAnd(filters) +
getFilterPatternsAnd(serverType, filters) +
"\t ?instance ?property ?num . \n" +
"\t FILTER( ISLITERAL(?num) && DATATYPE(?num) = <" + rangeUri + "> )\n" +
"} ");
Expand All @@ -141,12 +145,11 @@ public Query getQueryFacetRangeMinMax(String classUri, String facetUri, String r
}

@Override
public String convertFilterToSparqlPattern(String property, String range, String value) {
public String convertFilterToSparqlPattern(
SPARQLEndPoint.ServerType serverType, String property, String range, String value, int num) {
String pattern = "";
if (property.equalsIgnoreCase("urn:rhz:contains")) {
pattern += "\t ?instance ?anyProperty ?value . OPTIONAL { ?value rdfs:label ?valueLabel } \n" +
"\t\t FILTER ( (ISLITERAL(?value) && CONTAINS(LCASE(STR(?value)), " + value.toLowerCase() + ")) \n" +
"\t\t\t || CONTAINS(LCASE(STR(?valueLabel)), " + value.toLowerCase() + ") )";
pattern += containingText(serverType, value, num+"");
} else {
String propertyValueVar = Integer.toUnsignedString(property.hashCode() + value.hashCode());
pattern = "\t ?instance <" + property + "> ?v" + propertyValueVar + " . \n";
Expand Down
16 changes: 10 additions & 6 deletions src/main/java/net/rhizomik/rhizomer/service/OptimizedQueries.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.rhizomik.rhizomer.service;

import net.rhizomik.rhizomer.model.SPARQLEndPoint;
import org.apache.jena.query.ParameterizedSparqlString;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryFactory;
Expand Down Expand Up @@ -50,7 +51,8 @@ public Query getQueryClassFacets(String classUri) {
}

@Override
public Query getQueryFacetRangeValues(String classUri, String facetUri, String rangeUri,
public Query getQueryFacetRangeValues(
SPARQLEndPoint.ServerType serverType, String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters, boolean isLiteral, int limit, int offset, boolean ordered) {
ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
pQuery.setCommandText(prefixes +
Expand All @@ -61,7 +63,7 @@ public Query getQueryFacetRangeValues(String classUri, String facetUri, String r
"\t\t { SELECT DISTINCT ?instance " +
"\t\t\t WHERE { \n" +
"\t\t\t\t ?instance a ?class . \n" +
getFilterPatternsAnd(filters) +
getFilterPatternsAnd(serverType, filters) +
"\t\t\t } \n" +
"\t\t } \n" +
"\t\t ?instance ?property ?resource . \n" +
Expand All @@ -80,7 +82,8 @@ public Query getQueryFacetRangeValues(String classUri, String facetUri, String r
}

@Override
public Query getQueryFacetRangeValuesContaining(String classUri, String facetUri, String rangeUri,
public Query getQueryFacetRangeValuesContaining(
SPARQLEndPoint.ServerType serverType, String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters, boolean isLiteral, String containing, int top, String lang) {
ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
pQuery.setCommandText(prefixes +
Expand All @@ -89,7 +92,7 @@ public Query getQueryFacetRangeValuesContaining(String classUri, String facetUri
"\t { SELECT DISTINCT ?instance " +
"\t\t WHERE { \n" +
"\t\t\t ?instance a ?class . \n" +
getFilterPatternsAnd(filters) +
getFilterPatternsAnd(serverType, filters) +
"\t\t } \n" +
"\t } \n" +
"\t ?instance ?property ?resource . \n" +
Expand All @@ -108,8 +111,9 @@ public Query getQueryFacetRangeValuesContaining(String classUri, String facetUri
}

@Override
public Query getQueryFacetRangeMinMax(String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters) {
public Query getQueryFacetRangeMinMax(
SPARQLEndPoint.ServerType serverType, String classUri, String facetUri, String rangeUri,
MultiValueMap<String, String> filters) {
throw new UnsupportedOperationException("Optimized query for facet MIN and MAX not available");
}
}
Loading

0 comments on commit edbc2e5

Please sign in to comment.