Very nice David!
1. Does the MINUS actually utilize ElasticSearch indexes or just Blazegraph?
I'd like to help the community by writing up a bit better documentation on our SPARQL pages that talks about FILTER() versus MINUS() if no one has this info floating around? The only footnote I saw was: " MINUS lets you select results that *don’t* fit some graph pattern. FILTER NOT EXISTS is mostly equivalent (see the SPARQL spec for an example where they differ), but – at least on WDQS – usually slower by quite a bit." at the bottom of the SPARQL tutorial
https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial and the wiki page SPARQL query service https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries#Excluding_subsets has:
Excluding subsets
SPARQL has three different idioms for excluding subsets:
- OPTIONAL { ... ?x ... } FILTER(!bound(?x)), - FILTER NOT EXISTS { ... } - MINUS { ... }
Currently, in almost all circumstances, Blazegraph resolves all of these to the same query plan.
2. Is that still a true statement that those 3 above use the same query plan currently?