如何使用SPARQL从GraphDB的RDF数据中检索含共现关键词的文本
GraphDB中RDF文本双关键词共现的SPARQL实现方案
基础查询写法(适配当前4000条文献数据量)
直接运行以下语句即可拿到所有符合要求的文本:
PREFIX kg: <http://www.ztonebv.nl/KG#> SELECT DISTINCT ?textValue ?relatedNode WHERE { # 匹配所有关联hasText属性的节点与对应文本内容 ?relatedNode kg:hasText ?textValue . # 双条件过滤:文本同时包含两个目标术语,大小写不敏感 FILTER( REGEX(?textValue, "gut microbiota", "i") && REGEX(?textValue, "diabetes", "i") ) }
- 语句中提前声明了
kg前缀,避免重复书写冗长的IRI地址 - 正则匹配的
i参数为忽略大小写配置,可以覆盖"Gut Microbiota""DIABETES"等大小写变体,避免漏检;如果需要严格匹配原始大小写,删除该参数即可 - 加了
DISTINCT去重,避免重复的文本条目出现在结果里
大数据量优化写法(可选)
如果后续数据集规模上涨到十万、百万级,正则过滤的性能会下降,可以用GraphDB自带的Lucene全文索引能力提速,查询写法如下:
PREFIX kg: <http://www.ztonebv.nl/KG#> PREFIX luc: <http://www.ontotext.com/connectors/lucene#> SELECT DISTINCT ?textValue ?relatedNode WHERE { # 调用Lucene索引做布尔检索 ?query luc:query '"gut microbiota" AND "diabetes"' ; luc:entities ?relatedNode . ?relatedNode kg:hasText ?textValue . }
该写法检索速度远高于正则匹配,使用前需要先在GraphDB中为hasText属性创建对应的Lucene全文索引即可。
内容的提问来源于stack exchange,提问作者noobmaster69
相关产品推荐
相关产品推荐

