bif:contains 的奇怪结果 - 全文索引损坏?
Bizarre results with bif:contains - corrupted full text index?
我最近使用 dbpedia 数据构建了一个 Virtuoso 数据库(版本 07.10.3207)。我正在尝试为它构建一些查询,但遇到了非常 st运行ge 的结果。例如:
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"
}
这产生了一个命中。人们可能认为它意味着 Almond 的评论字段(匹配 "mythical" 的字段)包含单词 "mythical"。然而,事实并非如此。事实上:
"The almond (/??m?nd/) (Prunus dulcis, syn. Prunus amygdalus, Amygdalus communis, Amygdalus dulcis) (or badam in Indian English, from Persian: ??????) is a species of tree native to the Middle East and South Asia. "杏仁"也是这种树的可食用和广泛栽培的种子的名称。"@zh
许多其他查询产生类似的 st运行ge 结果。
在 public 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"))
}
伪运行dom 命中选择,none 其中包含 "mythical" 或“?”:
"Asgrrr"
“公元前 403 年”
"Potential infinity"
"Beauty and the Beast (talk show)"
"Alberta highway highway 22"
相同的查询,运行 在 http://dbpedia.org/sparql,returns 没有(应该如此)。
有什么想法吗?
重建数据库未能解决问题。但是,我能够通过执行以下步骤获得工作版本。其中一些可能是不必要的,但考虑到需要多长时间,我还没有进行对照实验来将范围缩小到最低限度。
首先,删除数据库和相关文件,从零开始。
将 virtuoso.ini 编辑为 uncomment/include:
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;
享受您的全文本搜索数据库!
我最近使用 dbpedia 数据构建了一个 Virtuoso 数据库(版本 07.10.3207)。我正在尝试为它构建一些查询,但遇到了非常 st运行ge 的结果。例如:
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"
}
这产生了一个命中。人们可能认为它意味着 Almond 的评论字段(匹配 "mythical" 的字段)包含单词 "mythical"。然而,事实并非如此。事实上:
"The almond (/??m?nd/) (Prunus dulcis, syn. Prunus amygdalus, Amygdalus communis, Amygdalus dulcis) (or badam in Indian English, from Persian: ??????) is a species of tree native to the Middle East and South Asia. "杏仁"也是这种树的可食用和广泛栽培的种子的名称。"@zh
许多其他查询产生类似的 st运行ge 结果。
在 public 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"))
}
伪运行dom 命中选择,none 其中包含 "mythical" 或“?”:
"Asgrrr" “公元前 403 年” "Potential infinity" "Beauty and the Beast (talk show)" "Alberta highway highway 22"
相同的查询,运行 在 http://dbpedia.org/sparql,returns 没有(应该如此)。
有什么想法吗?
重建数据库未能解决问题。但是,我能够通过执行以下步骤获得工作版本。其中一些可能是不必要的,但考虑到需要多长时间,我还没有进行对照实验来将范围缩小到最低限度。
首先,删除数据库和相关文件,从零开始。
将 virtuoso.ini 编辑为 uncomment/include:
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;
享受您的全文本搜索数据库!