Выполнение простого запроса SPARQL с использованием фильтров - PullRequest
0 голосов
/ 07 января 2019

У меня есть простой запрос SPARQL, который ищет общие узлы в графе, используя аргументы Filter и Union. Запрос занимает необычно много времени для компиляции. Я надеялся увидеть, возможно ли это перестроить структурно, чтобы повысить его производительность.

Разделяемые узлы - это любые из трех типов

  1. общий для двух объектов
  2. делится между двумя субъектами, а
  3. объект одной тройки, а объект другой.

Я предоставил график возможных данных в другой вопрос Я задал.

Запрос выглядит так:

    """SELECT DISTINCT ?b
       WHERE{ 
       {
          ?b ?p1 ?a.
          ?b ?p2 ?c.
          filter(?a != ?c).
      }
       UNION
       {
          ?a ?p1 ?b.
          ?c ?p2 ?b.
          filter(?a != ?c).
      }
       UNION
       {
          ?a ?p1 ?b.
          ?b ?p2 ?c.
          filter(?a != ?c).
       }}
       """

С тех пор, как я это опубликовал, я провел несколько экспериментов и узнал, что самая трудоемкая часть - средняя.

       {
          ?a ?p1 ?b.
          ?c ?p2 ?b.
          filter(?a != ?c).
      }
...