我试图了解如何最好地处理Marklogic数据中的文字,这些数据在任何情况下都可能是。我希望能够进行不区分大小写的搜索,但我相信语义查询是不可能的。对于一个简单的例子,我想要:
SELECT *
WHERE { ?s ?p "Red"}和
SELECT *
WHERE { ?s ?p "red"}返回所有值,无论对象是“红色”、“红色”、“红色”还是"Red“。
我的数据来自另一个有可变大写规则的来源。目前,我唯一能想到的就是添加一个额外的三元组,它总是以小写的形式包含文本,所以我总是可以搜索这个值。或者,在MarkLogic中使用不区分大小写的排序规则创建一些新的范围查询(如果在三重数据上可能的话),是否有意义?
发布于 2014-12-02 18:25:24
你可以用一个忽略大小写的过滤器。
select * where {
?s ?p ?o
FILTER (lcase(str(?o)) = "red")
}编辑:我向MarkLogic的PM Steve Buxton询问语义特性,他建议如下:
let $store := sem:store( (), cts:element-value-query(xs:QName("sem:object"), "red", "case-insensitive") )
return
sem:sparql('
SELECT ?o
WHERE {
?s ?p ?o
FILTER (lcase(str(?o)) = "red")
}', (), (), $store
)商店是一个MarkLogic 8(现在可以通过早期存取获得)函数,它可以选择一组三元组。然后,SPARQL查询在精简集上运行,限制了需要过滤的三元组数。
https://stackoverflow.com/questions/27255449
复制相似问题