Xquery eXist db ft:查询在运行eXide或氧气时返回零结果
我正在对存储在existdb中的集合运行ft:query,但它返回的结果为零。如果我使用fn:contains函数,它工作得很好,但ft:query返回零结果。下面是我的XML结构、索引配置文件和查询: test.xmlXquery 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
<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"/>