【发布时间】:2018-06-25 12:00:51
【问题描述】:
我正在使用 GraphDB 的 Lucene connectors。我为我的三重存储中的实体代码构建索引my_index,我想使用这样的索引进行子字符串匹配。
示例。
实体代码:
FooBar
FooBaz
BazFoo
Lucene 连接器:
PREFIX :<http://www.ontotext.com/connectors/lucene#>
PREFIX inst:<http://www.ontotext.com/connectors/lucene/instance#>
INSERT DATA {
inst:my_index :createConnector '''
{
"fields": [
{
"fieldName": "code",
"propertyChain": [
"http://foo#identifier"
],
"indexed": true,
"stored": true,
"analyzed": true,
"multivalued": true,
"facet": true
}
],
"types": [
http://foo#MyType"
],
"stripMarkup": false
}
''' .
}
SPARQL 查询利用 Lucene 连接器:
PREFIX : <http://www.ontotext.com/connectors/lucene#>
PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#>
SELECT ?entity {
?search a inst:my_index ;
:query "code:Foo*" ;
:entities ?entity .
}
我想获取代码以Foo 开头的所有实体(即FooBar、FooBaz),但我得到的是一个空结果集。
我怎样才能得到它们?
编辑:
在尝试了 Vassil 的answer 中的示例后,我发现问题可能与区分大小写有关。
行为:
:query "label:Foo*"不返回任何内容:query "label:foo*"返回FooBar和FooBaz
【问题讨论】:
-
我建议
swrlb:startsWith("Foo") -
它是否使用某种索引?
-
不,但比正则表达式更适合字符串匹配。
-
我明白了。我正在尝试使用 Lucene 进行此类文本搜索。