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