我最近使用dbpedia数据构建了一个Virtuoso数据库(版本07.10.3207)。我正在尝试为它构建一些查询,并遇到非常奇怪的结果。举个例子:
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?s, ?p, ?o where {
?s ?p ?o .
?s rdfs:label "Almond"@en .
?o bif:contains "mythical"
}
这会产生一个打击。人们可能会认为它意味着杏仁的评论字段(与“神话”匹配的字段)包含“神话”这个词。但事实并非如此。实际上是:
“杏仁(/ ?? m?nd /)(Prunus dulcis,syn.Pruus amygdalus,Amygdalus communis,Amygdalus dulcis)(或印度英语中的badam,来自波斯语:??????)是一个物种原产于中东和南亚的树木。“杏仁”也是这种树的可食用和广泛种植的种子的名称。“@ en
许多其他查询会产生类似的奇怪结果。
在公共dbpedia端点上尝试相同的查询不会产生这些奇怪的结果,所以我知道它在某种程度上是我的数据库的问题。我猜这可能与全文索引的某些腐败有关。
我尝试了以下内容,根据我能够找到的其他说明,没有对他们究竟会做什么的超级清楚的理解:
DB.DBA.RDF_OBJ_FT_RULE_ADD(null, null, 'All');
DB.DBA.VT_INC_INDEX_DB_DBA_RDF_OBJ();
DB.DBA.RDF_OBJ_FT_RECOVER();
DB.DBA.VT_INDEX_DB_DBA_RDF_OBJ();
到目前为止,没有骰子。我有点想知道它是否可能与评论字段中的受损字符有关 - 在线dbpedia端点正确呈现它们,而我的Virtuoso安装只是给出问号,如上所示。甚至不知道如何开始接近这个。
我确实在virtuoso.ini中包含了SQL_UTF8_EXECS = 1(并随后重新启动了服务器),这仍然在结果中留下了问号。
实际上,它似乎与这些问号无关;我运行了以下查询:
select ?s, ?p, ?o where {
?s ?p ?o .
?o bif:contains "mythical" .
FILTER (!regex(?o, "mythical", "i"))
}
一个伪随机选择的命中,其中没有一个包含“神话”或“?”:
“Asgrrr” “公元前403年” “潜在的无限” “美女与野兽(脱口秀)” “艾伯塔省高速公路22号公路”
在http://dbpedia.org/sparql运行的同一查询不返回任何内容(应该如此)。
有什么想法吗?
答案 0 :(得分:1)
重建数据库并未解决问题。但是,我可以通过以下步骤获得工作版本。其中一些可能是不必要的,但考虑到需要多长时间,我还没有完成对照实验以将范围缩小到最小。
首先,删除数据库和相关文件,以空白平板开始。
编辑virtuoso.ini以取消注释/包含:
SQL_UTF8_EXECS = 1
启动Virtuoso,然后从isql发出以下命令:
DB.DBA.RDF_OBJ_FT_RULE_ADD (null, null, 'All');
DB.DBA.VT_BATCH_UPDATE ('DB.DBA.RDF_OBJ', 'OFF', null);
DB.DBA.VT_INC_INDEX_DB_DBA_RDF_OBJ ();
DB.DBA.RDF_OBJ_FT_RECOVER ();
COMMIT WORK;
CHECKPOINT;
CHECKPOINT_INTERVAL(60000);
然后,加载数据。
然后,致电:
COMMIT WORK;
CHECKPOINT;
DB.DBA.VT_INC_INDEX_DB_DBA_RDF_OBJ();
CHECKPOINT;
COMMIT WORK;
CHECKPOINT;
CHECKPOINT_INTERVAL(60);
COMMIT WORK;
享受全文搜索数据库!