【问题标题】:Blazegraph full text search with total count带有总数的 Blazegraph 全文搜索
【发布时间】:2017-09-07 12:22:46
【问题描述】:

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

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
  }
 }

返回类似这样的内容(s 字段与我在查询中提供的特定谓词和过滤器匹配):

+-------+----------------------------------------+
| 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” . 但是,用与前一个相同的结构编写查询是行不通的:

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 
 }
}

即使这些子查询单独返回正确的结果。

【问题讨论】:

  • 也许BLZG-1198: "全文搜索仅在显式服务调用的子查询中有效。"

标签: sparql blazegraph


【解决方案1】:

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

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 
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2014-04-15
    • 2016-05-30
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多