XQuery关键字搜索问题

时间:2019-04-11 01:25:48

标签: xml xquery exist-db keyword-search

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

但是,执行代码后出现错误(无效的qname文本:match-count)。是否缺少定义名称空间的内容?

任何人都可以帮助我解决此问题吗?谢谢。

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

Error Screen

Coding Part

1 个答案:

答案 0 :(得分:0)

已弃用错误消息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之后,您就可以使用/db/test函数来查询ft:query集合并使用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的较新的全文本搜索引擎-本文的其余部分基本上仍将适用。