Sparql ApacheJena文本:多字段查询

Sparql ApacheJena文本:多字段查询,sparql,jena,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:entityF

是否可以在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 ]
    ) .
a文本:EntityMap;
文本:entityField“uri”;
文本:朗菲尔德“朗”;
文本:图形字段“图形”;##启用特定于图形的索引
文本:默认字段“prefLabel”;##必须在文本中定义:map
文本:uid字段“uid”;##必须为删除定义
文字:地图(
#skos:预标签
[文本:字段“prefLabel”;文本:谓词skos:prefLabel]
#skos:altLabel
[文本:字段“altLabel”;文本:谓词skos:altLabel]
#skos:hiddenLabel
[文本:字段“hiddenLabel”;文本:谓词skos:hiddenLabel]
) .

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

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

从官方文件:

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

值得注意的是,Lucene或字段的等价物仅通过SPARQL union表示:

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

这真的有效吗?在我的测试中没有。例如:``选择?主题?prefLabel其中{?主题文本:查询'prefLabel:z*';skos:prefLabel?prefLabel}``我已经在上面添加了我的实体映射,它现在在单独的字段中将它们全部分开,并重新编制索引。你找到答案了吗?如果是这样的话,你能分享一下吗?不幸的是,当时lucene的索引还没有完全被破坏,我不知道它目前的状态如何。我最终只是将solr添加到项目中,并使两者保持同步,这当然会有问题,但它解决了我的问题。
{ ?s text:query (rdfs:label "printer") . }
union
{ ?s text:query (ex:description "large capacity cartridge") . }