Sparql ApacheJena文本:多字段查询
是否可以在Apache Jena中搜索多个字段: 例如,这很好: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
?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") . }