我正在运行ft:查询存储在eXist-db中的集合,但它返回零结果。如果我使用fn:contains函数它完美但ft:查询返回零结果。下面是我的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>
collection.xconf
<collection xmlns="http://exist-db.org/collection-config/1.0">
<index rsc="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">
<fulltext default="all" attributes="false"/>
<lucene>
<analyzer id="nosw" class="org.apache.lucene.analysis.standard.StandardAnalyzer">
<param name="stopwords" type="org.apache.lucene.analysis.util.CharArraySet"/>
</analyzer>
<text qname="//rsc:article" analyzer="nosw"/>
</lucene>
<create path="//rsc:doctitle" type="xs:string"/>
<create path="//rsc:journal-full-title" type="xs:string"/>
<create path="//rsc:journal-full-title" type="xs:string"/>
</index>
</collection>
test.xq
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
答案 0 :(得分:1)
我不确定是否以正确的方式配置没有停用词的标准分析器。您能否与Monex核实您的索引中是否包含您的条款?
另请注意,如果在加载索引后创建了索引配置,则需要重新索引集合。重新索引时,还值得监视$EXIST_HOME/webapp/WEB-INF/exist.log
以确保索引按预期完成。
答案 1 :(得分:1)
让我们从您的查询开始。查询的关键部分是:
$coll//rsc:doctitle[ft:query(., 'studies')]
这将对集合中studies
个元素的字符串rsc:doctitle
执行全文查询。要使此ft:query()
函数起作用,必须有指定元素的索引配置。这将我们带到您的索引配置。
在索引配置中,您有一个全文(Lucene)索引:
<text qname="//rsc:article" analyzer="nosw"/>
有几个问题:
@qname
属性应该是QName - 简单地说,是元素或属性名称。你已经将此表达为一条道路。删除路径//
,只留下rsc:article
。
您的代码在rsc:doctitle
上进行全文查询,而不是在rsc:article
上进行全文查询,因此我希望您编写的代码返回0结果。将现有索引更改为rsc:doctitle
,或在rsc:doctitle
上添加新索引,以便查询其中任何一个。之后重新索引集合,并按照Adam的建议,检查Monex应用程序的索引窗格,以确保数据库已按预期应用了索引配置。
最后,contains()
不需要索引。它受益于范围索引(即您的<create>
元素)的存在,但范围索引与全文索引完全不同。要了解有关这些内容的更多信息,我建议您阅读有关索引的eXist文档http://exist-db.org/exist/apps/doc/indexing.xml。