【问题标题】:XQuery Keyword Search IssueXQuery 关键字搜索问题
【发布时间】:2019-04-11 01:25:47
【问题描述】:

我正在学习 XQuery 关键字搜索并在网站上显示结果。而且我发现有有用的教程网站一步一步开发一个网站。

但是,我在执行代码后得到一个错误(Invalid qname text:match-count)。是否缺少定义命名空间?

谁能帮我解决这个问题?谢谢。

教程网站:https://en.wikibooks.org/wiki/XQuery/Keyword_Search

【问题讨论】:

  • 您是否使用 eXist 来尝试这些示例?我认为本教程是由 eXist 用户编写并为 eXist 用户编写的。
  • 是的。我使用的是 eXist-db 平台。所以我不知道如何解决它。
  • 我添加了一个存在的标签,希望有内幕的人能帮助你。
  • 好的!谢谢马丁。

标签: xml xquery exist-db keyword-search


【解决方案1】:

错误消息标记的函数 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 的全文搜索引擎 - 文章的其余部分应该仍然基本适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2012-02-22
    • 2010-10-07
    相关资源
    最近更新 更多