Xquery eXist db ft:查询在运行eXide或氧气时返回零结果

Xquery eXist db ft:查询在运行eXide或氧气时返回零结果,xquery,exist-db,oxygenxml,exide,Xquery,Exist Db,Oxygenxml,Exide,我正在对存储在existdb中的集合运行ft:query,但它返回的结果为零。如果我使用fn:contains函数,它工作得很好,但ft:query返回零结果。下面是我的XML结构、索引配置文件和查询: test.xml <article xmlns="http://www.rsc.org/schema/rscart38" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="ART" xsi:s

我正在对存储在existdb中的集合运行ft:query,但它返回的结果为零。如果我使用fn:contains函数,它工作得很好,但ft:query返回零结果。下面是我的XML结构、索引配置文件和查询:

test.xml

<article xmlns="http://www.rsc.org/schema/rscart38"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    type="ART" 
    xsi:schemaLocation="http://www.rsc.org/schema/rscart38 http://www.rsc.org/schema/rscart38/rscart38.xsd" dtd="RSCART3.8">
    <metainfo last-modified="2012-11-23T19:16:50.023Z">
        <subsyear>1997</subsyear>
        <collectiontype>rscart</collectiontype>
        <collectionname>journals</collectionname>
        <docid>A605867A</docid>
        <doctitle>NMR studies on hydrophobic interactions in solution Part
            2.—Temperature and urea effect on
            the self-association of ethanol in water</doctitle>
        <summary/>
</article>

我不确定以您的方式配置没有停止字的标准分析器是否正确。你能和Monex核实一下你的索引里有你的术语吗


另外请注意,如果在加载索引后创建了索引配置,则需要重新为集合编制索引。重新编制索引时,还值得监视
$EXIST\u HOME/webapp/WEB-INF/EXIST.log
,以确保按预期完成索引。

让我们从查询开始。查询的关键部分是:

$coll//rsc:doctitle[ft:query(., 'studies')] 
这将对集合中的
rsc:doctitle
元素执行字符串
studies
的全文查询。要使此
ft:query()
函数正常工作,必须为命名元素提供索引配置。这就引出了索引配置

在索引配置中,您有一个全文(Lucene)索引:


有几个问题:

  • @qname
    属性应该是一个qname——简单地说,就是一个元素或属性名。您已将其表示为路径。删除路径
    /
    ,只留下
    rsc:article

  • 您的代码在
    rsc:doctitle
    上执行全文查询,而不是在
    rsc:article
    上执行全文查询,因此我希望您编写的代码返回0个结果。将现有索引更改为
    rsc:doctitle
    ,或在
    rsc:doctitle
    上添加一个新索引,以便可以查询其中一个。然后重新为集合编制索引,并按照Adam的建议,检查Monex应用程序的索引窗格,以确保数据库按预期应用了索引配置


  • 最后,
    contains()
    不需要索引。它得益于范围索引(即
    元素)的存在,但范围索引与全文索引大不相同。要了解更多信息,我建议阅读关于索引的eXist文档。

    正如我从JensØstergaard Petersen于2016年4月发布的eXist open()上的一篇文章中所了解的那样,其中包括一个空的stopwords元素,可防止Lucene应用其默认的stopwords集(请参阅这些内容的完整列表)。谢谢您的回复Adam,每当我更改conf文件时,我都会重新为集合编制索引,但仍然得到零结果,我在哪里可以从eXist db 3.0-RC1和Up的仪表板中的软件包管理器找到MonexMonex?另外,您还没有正确声明
    rsc
    命名空间:
    应该是
    。应删除其余属性;您可能应该添加
    xmlns:xs=”http://www.w3.org/2001/XMLSchema"
    尽管如此。无论您建议我做了什么,但我都没有得到结果,每当我更改conf文件时,我都会重新索引collecton,但我仍然得到下面的零结果是代码:xquery:declare namespace rsc=“”;让$coll:=collection('/db/apps/test/RSC')让$hits:=$coll//RSC:doctitle[ft:query(,'studies')]返回$hitsalso我试图通过删除conf文件中的“//”进行搜索,但它仍然不起作用,我在哪里可以找到monexist?您正在运行哪个版本的eXist?
    declare namespace rsc="http://www.rsc.org/schema/rscart38";
    let $coll := collection('/db/apps/test/RSC')
    let $hits := $coll//rsc:doctitle[ft:query(., 'studies')] 
    return 
        $hits
    
    $coll//rsc:doctitle[ft:query(., 'studies')] 
    
    <text qname="//rsc:article" analyzer="nosw"/>