bif的奇怪结果:包含 - 损坏的全文索引?

时间:2015-01-21 17:53:52

标签: sparql virtuoso

我最近使用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运行的同一查询不返回任何内容(应该如此)。

有什么想法吗?

1 个答案:

答案 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;

享受全文搜索数据库!