[英]XQuery Keyword Search Issue
我正在学习XQuery关键字搜索并在网站中显示结果。 而且我发现有有用的教程网站逐步地开发了一个网站。
但是,执行代码后出现错误(无效的qname文本:match-count) 。 是否缺少定义名称空间?
有人可以帮助我解决此问题吗? 谢谢。
教程网站: https : //en.wikibooks.org/wiki/XQuery/Keyword_Search
由错误消息标记的函数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
重新/db/system/config/db/test
索引,为您节省了一些步骤。收集以应用新的收集配置(您可以使用xmldb:reindex("/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的较新的全文本搜索引擎-本文的其余部分仍应基本上适用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.