【发布时间】:2020-12-01 21:43:39
【问题描述】:
当 URI 被索引时,GraphDB Lucene 连接器似乎有一种奇怪的行为(因为使用 $self 准属性或因为属性链导致 URI)。我将这个问题总结如下:
-
URI 中的大写字母必须在查询文本中进行转义(即查询文本必须是“*\Merlo”,而不是 here 提供的 wine 示例中的“*Merlo”)
-
无法从 URI 中提取 sn-p
知道如何克服这个问题吗?
【问题讨论】:
当 URI 被索引时,GraphDB Lucene 连接器似乎有一种奇怪的行为(因为使用 $self 准属性或因为属性链导致 URI)。我将这个问题总结如下:
URI 中的大写字母必须在查询文本中进行转义(即查询文本必须是“*\Merlo”,而不是 here 提供的 wine 示例中的“*Merlo”)
无法从 URI 中提取 sn-p
知道如何克服这个问题吗?
【问题讨论】:
Lucene 连接器将 URI 视为非分析字段,即作为单个字符串块,其标记不是单词,也不会被标记或分析为单词。逻辑是 URI 是标识符,它们仅具有整体含义。 URI 不包含文本,即使它们有时对人们有意义。这也意味着普通的全文查询将无法在这些字段上工作,也无法提取任何 sn-ps。它们可以被搜索,但由于它不是全文,它们的行为可能会出乎意料。
在您使用“*Merlo”之类的查询的特定示例中,Lucene 将通过分析器运行查询,以便能够匹配分析的字段(即通常用于全文搜索的字段)。通过转义大写字母,您可以防止分析器将其规范化为小写 m 并且您会得到匹配。
如果您需要完全匹配,您也可以这样做(注意无需转义大写字母):
PREFIX : <http://www.ontotext.com/connectors/lucene#>
PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#>
SELECT * {
?search a inst:my_index ;
# Surround with double quotes to force an exact match
:query "\"http://www.ontotext.com/example/wine#Merlo\"" ;
:entities ?entity .
}
【讨论】: