我目前在Windows 7上使用eXist-db 2.2,为Java分配了1.3gb的RAM。
我一直在尝试优化XQuery:
xquery version "3.0";
let $phrase := "flight"
let $nbsp := " "
let $containing := collection("/db/MyDb")//value[contains(.,$phrase)]
return (count($containing))
但此查询始终对数据库执行扫描。我的 collection.xconf 是这样的:
<collection xmlns="http://exist-db.org/collection-config/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<index>
<fulltext default="none" attributes="false"/>
<!-- create qname="value" content="mixed" /-->
<lucene>
<analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
<analyzer id="ws" class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
<text qname="value" analyzer="ws"/>
</lucene>
<range>
<create qname="value">
<field name="value" match="value" type="xs:string" case="no"/>
</create>
</range>
</index>
</collection>
value 节点存在于XML的多个级别中,因此我希望它将索引此特定节点,而不管它在树中的位置。
您对如何使用索引有任何建议吗?
更新为包含我使用的XML片段:
<v1 attribute1="b3492">
<person>
<sub id="b733" name="b733" />
<section id="5897" label="a">
<section id="e70e" label="a.a" >
<field id="7e8a" label="a.a.f01">
<value type="String">test value</value>
</field>
<section id="78ea1" label="a.a.s01" >
<field id="7e8a" label="a.a.s01.f01">
<value type="String">test value 2</value>
</field>
</section>
</section>
</section>
</person>
</v1>
我使用的XML文件的大小范围从&lt; 10K到&gt; 2M。我已经加载了大约12,000个这些文件,基本查询目前需要5分钟。
更新 - &gt;我更新了 collection.xconf ,如下所示:
<collection xmlns="http://exist-db.org/collection-config/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<index>
<fulltext default="none" attributes="false"/>
<!-- create qname="value" content="mixed" /-->
<lucene>
<analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
<analyzer id="ws" class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
<text qname="value" analyzer="ws"/>
</lucene>
<range>
<create qname="value" type="xs:string"/>
</range>
</index>
</collection>
现在似乎使用了索引,因为查询会更快地返回结果。但是&#34;更快&#34;这意味着大约1分钟后返回结果,这仍然太慢。是否有其他指令来提高索引利用率?
答案 0 :(得分:0)
您的索引定义似乎与documentation不匹配。
我认为你应该使用
<range>
<create qname="value" type="xs:string" />
</range>
您当前的索引可能正在寻找值/值。