【问题标题】:Apache Jena text:query on multiple fieldsApache Jena 文本:查询多个字段
【发布时间】:2015-10-15 14:52:38
【问题描述】:

是否可以在 Apache Jena 中搜索多个字段:

例如,这可以正常工作:

?subject text:query (skos:prefLabel 'a*' 25);

但是如何在 2 个字段中使用 OR 进行搜索,例如在 prefLabel 或 altLabel 中。

?subject text:query (skos:prefLabel 'a*' OR skos:altLabel 'a*' 25);

我的实体图是:

<#entMap> a text:EntityMap ;
    text:entityField      "uri" ;
    text:langField        "lang" ;
    text:graphField       "graph" ; ## enable graph-specific indexing
    text:defaultField     "prefLabel" ;  ## Must be defined in the text:map
    text:uidField         "uid" ;   ## Must be defined for deletion
    text:map (
         # skos:prefLabel
         [ text:field "prefLabel" ; text:predicate skos:prefLabel ]
         # skos:altLabel
         [ text:field "altLabel" ; text:predicate skos:altLabel ]
         # skos:hiddenLabel
         [ text:field "hiddenLabel" ; text:predicate skos:hiddenLabel ]
    ) .

【问题讨论】:

  • 您找到答案了吗?如果有,可以分享一下吗?
  • 不幸的是,当时 lucene 索引几乎被破坏了,我不确定它的当前状态是什么。我最终只是将 solr 添加到项目中并保持两者同步,这当然可能有问题,但它解决了我的问题。

标签: sparql jena


【解决方案1】:

我对 Apache Jena 不是特别流利,但关于 SPARQL,您可以将两个文本搜索结合起来(注意:这更像是 AND 而不是 OR)。

{
 ?subject text:query (skos:prefLabel 'a*' 25);
}
UNION
{
 ?subject text:query (skos:altLabel 'a*' 25);
}

【讨论】:

    【解决方案2】:

    测试查询部分,'a*' 字符串,可以是任何 Lucene 查询字符串。如果您使用的是 Lucene 字段,则需要使用分配的字段名称,而不是属性名称。

    【讨论】:

    • 这真的有效吗?在我的测试中没有。例如:``` SELECT ?subject ?prefLabel WHERE { ?subject text:query 'prefLabel:z*'; skos:prefLabel ?prefLabel } ``` 我已经在上面添加了我的实体映射,现在它确实将它们全部分隔在单独的字段中并重新编制索引。
    【解决方案3】:

    来自官方文档:https://jena.apache.org/documentation/query/text-query.html#queries-across-multiple-fields

    换句话说,当一个查询涉及两个或多个属性时,它在 SPARQL 级别表示,而不是在 Lucene 的查询语言中。

    值得注意的是,Lucene OR of Fields 的等价物通过 SPARQL union 简单地表达:

    { ?s text:query (rdfs:label "printer") . }
    union
    { ?s text:query (ex:description "large capacity cartridge") . }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多