Apache Jena文本:查询多个字段

时间:2015-10-15 14:52:38

标签: sparql jena

是否可以搜索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 ]
    ) .

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我对Apache Jena并不是特别流利,但对于SPARQL,您可以使用两个文本搜索执行联合(注意:这更多是AND而不是OR)。

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

答案 2 :(得分:0)

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

换句话说,当一个查询要包含两个或多个属性时,它就以SPARQL级别表示,而不是以Lucene的查询语言表示。

值得注意的是,字段的Lucene OR的等效项仅通过SPARQL并集来表示:

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