Указывает ли этот запрос, что test1 имеет более высокий приоритет, чем test2 при фильтрации результатов? другими словами, влияет ли это на порядок результатов? в случае, когда я ограничиваю результаты до 20, например, что меньше, чем общее количество (скажем, 60), получу ли я сначала результаты test1, а затем test2?
Когда в конце запроса нет порядка по, порядок не указан, поэтому реализация, безусловно, может изменить порядок на основе фильтра, но это не так. кажутся особенно вероятными, по крайней мере, не очевидным образом. Когда вы спрашиваете: «Сначала я получу результаты test1, а затем test2», это наводит на мысль о некотором непонимании того, что делает filter. Фильтр – это способ указания некоторых условий, которым должен удовлетворять результат, чтобы быть включенным в набор результатов. Концептуально, перед фильтром находится список результатов в рабочем наборе результатов, а затем к каждому применяется тест фильтр, и те, которые удовлетворяют тесту хранятся. Нет никаких «результатов» test1 или test2 в каком-либо осмысленном смысле. Различные способы применения теста могут повлиять на порядок, например, в зависимости от того, является ли он:
final results = {}
for (result in working results)
for (testi in tests)
if result passes test
add result to final results
or
final results = {}
for (testi in tests)
for (result in working results)
if result passes test
add result to final results
Поскольку окончательные результаты представляют собой набор, вы получите тот же набор, но поскольку результаты в конечном итоге предоставляются в виде списка, возможно, это может повлиять на порядок, в котором вы видите результаты. Но как я сказал выше, маловероятно, что таким образом вы получите какую-либо надежную и значимую разницу.
если нет, то есть ли способ установить такой приоритет?
Если вы хотите каким-то образом упорядочить результаты, вам нужно выяснить, как получить этот приоритет, а затем вы сможете упорядочить его. Например, в вашем случае вы можете сделать что-то вроде:
select ?keywords {
values ?test { "test1" "test2" "test3" }
#-- get a binding for ?keywords...
filter regex(str(?keywords), ?test)
}
order by ?test
В этом случае, поскольку значения ?test имеют надежный порядок, вы можете упорядочить результаты на основе совпадающих значений ?test. Конечно, если ?keywords соответствует более чем одному значению ?test, вы увидите его несколько раз в результатах.
Если критерии не такие простые, как строка, вы все равно можете использовать значения для указания приоритета:
select ?keywords {
values (?test ?priority) { ("test1" 3) ("test2" 0) ("test3" 5)}
#-- get a binding for ?keywords...
filter regex(str(?keywords), ?test)
}
order by ?priority
person
Joshua Taylor
schedule
30.06.2016