我一直在研究stackoverflow以及其他各种资源,但我一直在努力使特定查询正常工作。
我有一个具有许多父/子关系的图(1 milj个节点);而且我想找到特定的节点,然后追溯到根节点。
当我执行子查询时,获取我想要的节点范围;我得到亚秒级结果
select distinct ?af_node
# ?word_value
where {
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "CompanySizeTurnoverSegmentation";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "NumberOfEmployees";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "CompanySizeSegmentation";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "Turnover";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "CompanySizeTurnoverSegmentation";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "AnnualAccountsFlag";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
}
现在,当我只使用一个节点并将其跟随回到根节点时,我仍然会得到亚秒级的结果。结果是一条很短的路,但是其他水平超过10级的人。
select *
where {
?af_node <cd:is_a> <http://site.eu/entity-type#ArteFact>;
<cd:identifier> "efac028c-ae79-4837-bb2a-01f8a12c5924";
<cd:has_root>+ ?af_node_root
.
}
但是,如果我尝试将两者结合起来,查询会花费很多时间,CPU和内存会消耗很多时间;我猜想正在发生某种笛卡尔积。
select *
where {
?af_node <cd:is_a> <http://site.eu/entity-type#ArteFact>;
<cd:identifier> "450285fa-9390-41d7-ad51-006624c43db2"
.
filter exists {
select distinct ?af_node
# ?word_value
where {
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "CompanySizeTurnoverSegmentation";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "NumberOfEmployees";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "CompanySizeSegmentation";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "Turnover";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "CompanySizeTurnoverSegmentation";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
union
{
select ?af_node ?word_value
where {
?word <cd:is_a> <http://site.eu/entity-type#Word>;
<cd:value> "AnnualAccountsFlag";
<cd:value> ?word_value;
<cd:is_related_to> ?af_sentence
.
?af_sentence <cd:is_a> <http://site.eu/entity-type#SentenceWord>;
<cd:belongs_to> ?af_node
}
}
}
}
.
?af_node <cd:has_root>+ ?af_node_root
.
}
知道我在这里缺少什么吗?
谢谢!
H