错误消息标记的函数 text:match-count() 已被弃用并从 eXist 中删除,原始 eXist 特定的全文搜索运算符 &= 也是如此。因此,这篇文章(历史页面提醒我我在 10 年零 3 个月前贡献了!)迫切需要更新。这些“遗留”全文功能已从 eXist 中删除,因为添加了一个非常出色的解决方案,即基于 Lucene 的全文索引,您可以在 https://exist-db.org/exist/apps/doc/lucene 中阅读。
更新后的文章将关注新的基于 Lucene 的全文索引。首先,创建一个集合配置文件,名为collection.xconf:
<collection xmlns="http://exist-db.org/collection-config/1.0">
<index xmlns:xs="http://www.w3.org/2001/XMLSchema">
<lucene>
<text qname="body"/>
<text qname="biography"/>
</lucene>
</index>
</collection>
将此文档保存在/db/test 集合中。 eXide 将通过以下方式为您节省几个步骤:(1) 将文档的副本存储在真正需要的位置(在 /db/system/config/db/test 集合中)和 (2) 重新索引 /db/test 集合以应用新的集合配置(您可以使用xmldb:reindex("/db/test") 手动完成):
将集合配置文件保存为/db/system/config/db/test/collection.xconf,然后可以使用ft:query函数查询/db/test集合,并使用ft:score函数对结果进行排序:
let $hits :=
(
collection('/db/test/articles')/article/body,
collection('/db/test/people')/people/person/biography
)[ft:query(., $q)]
for $hit in $hits
let $score := ft:score($hit)
order by $score descending
return $hit
(请注意,与本文相比,我们可以省去过滤用户提供的查询字符串,因为我们不再使用 util:eval。起初这并不是真正必要的。)
随着这一变化 - 切换到 eXist 更新的基于 Lucene 的全文搜索引擎 - 文章的其余部分应该仍然基本适用。