首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazegraph全文搜索和总计数

Blazegraph全文搜索和总计数
EN

Stack Overflow用户
提问于 2017-09-07 20:22:47
回答 1查看 581关注 0票数 2

在SPARQL中,我可以执行以下查询,以便在一个查询结果中检索字段和总计数:

代码语言:javascript
复制
SELECT  ?total ?s
WHERE
  { 
    { SELECT  (COUNT(?s) AS ?total)
      WHERE
        { ?s  <https://some/predicate/for/var1>  ?var1 ;
              <https://some/predicate/for/var1>  ?var2
          FILTER ( ( ?var1 = "something" ) && ( ?var2 = "something2" ) )
        }
    }
    { SELECT  ?s
      WHERE
        { ?s  <https://some/predicate/for/var1>  ?var1 ;
           <https://some/predicate/for/var1>  ?var2
       FILTER ( ( ?var1 = "something" ) && ( ?var2 = "something2" ) )
        }
   LIMIT   3
  }
 }

它返回如下内容(字段与我在查询中提供的特定谓词和过滤器相匹配):

代码语言:javascript
复制
+-------+----------------------------------------+
| total |                   s                    |
+-------+----------------------------------------+
|   150 | http://the/path/to/the/subject         |
|   150 | http://the/path/to/another/subject     |
|   150 | http://the/path/to/yet/another/subject |
+-------+----------------------------------------+

我想对full text search queries做同样的事情,它可以像下面这样使用?s bds:search “something” .但是,使用与前一个相同的结构组成一个查询是不起作用的:

代码语言:javascript
复制
PREFIX  bds:  <http://www.bigdata.com/rdf/search#>
SELECT  ?total ?s ?org
WHERE
{
{ SELECT  (COUNT(?s) AS ?total)
    WHERE{
          ?matchedValue
                    bds:search        "something" ;
                    bds:relevance     ?score ;
                    bds:rank          ?rank .
          ?s        ?matchedProperty  ?matchedValue
          FILTER ( ! isBlank(?s) )
    }
}
{ SELECT  ?s ?matchedProperty ?score ?rank
    WHERE{
          ?matchedValue
                    bds:search        "something" ;
                    bds:relevance     ?score ;
                    bds:rank          ?rank .
          ?s        ?matchedProperty  ?matchedValue
          FILTER ( ! isBlank(?s) )
    }
    LIMIT 10 
 }
}

尽管如此,这些子查询仍然分别返回正确的结果。

EN

回答 1

Stack Overflow用户

发布于 2017-09-07 21:44:59

正如@stanislav-kralin正确提到的,并且来自issue in Jira,您必须显式地使用SERVICE子句:

代码语言:javascript
复制
PREFIX  bds:  <http://www.bigdata.com/rdf/search#>
SELECT  ?total ?s ?org
WHERE
{
  { SELECT  (COUNT(?s) AS ?total)
      WHERE {
         SERVICE <http://www.bigdata.com/rdf/search#search> {
              ?matchedValue
                        bds:search        "something" ;
                        bds:relevance     ?score ;
                        bds:rank          ?rank .
          }
          ?s        ?matchedProperty  ?matchedValue
          FILTER ( ! isBlank(?s) )
        }
}
  { SELECT  ?s ?matchedProperty ?score ?rank
      WHERE {
         SERVICE <http://www.bigdata.com/rdf/search#search> {
            ?matchedValue
                  bds:search        "something" ;
                  bds:relevance     ?score ;
                  bds:rank          ?rank .
          }
          ?s        ?matchedProperty  ?matchedValue
          FILTER ( ! isBlank(?s) )
        }
      LIMIT 10 
 }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46096250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档