条件组合索引:当索引有多种十进制类型时,无法查询所需的结果



使用版本:4.5.0

db/

system/config/db/test/collection.xconf 代码如下:

<range>
        <create qname="item">
            <condition attribute="name" value="number"/>
            <field name="number" match="@value" type="xs:decimal"/>
        </create>
        <create qname="item">
            <condition attribute="name" value="acreage"/>
            <field name="acreage" match="@value" type="xs:decimal"/>
        </create>
        <create qname="item">
            <condition attribute="name" value="radii"/>
            <field name="radii" match="@value" type="xs:decimal"/>
        </create>
        <create qname="item">
            <condition attribute="name" value="diameter"/>
            <field name="diameter" match="@value" type="xs:decimal"/>
        </create>
    </range>

浏览索引

db/test XML 文件的代码如下:

<root>
<item name="number" value="4"/>
<item name="acreage" value="5"/>
<item name="radii" value="6"/>
<item name="diameter" value="7"/> </root>

查询语句:

//item[@name='radii'][@value>5.0]

查询分析

无结果

理论上可以找到XML文件,但找不到结果是为了什么?你可以帮我吗?谢谢!

根据您在此处尝试使用的 eXist 条件组合索引功能的文档,在我看来,此功能仅支持字符串比较(具有可选的"数字"模式)。请参阅 https://exist-db.org/exist/apps/doc/newrangeindex#D3.21.18。换句话说,您的@type="xs:decimal"不会导致属性的值被转换为xs:decimal;实际上,相反,它们被索引为 xs:string .

因此,要使查询使用给定数据,请将谓词更改为 [@value gt "5"]

或者,若要强制进行数值比较,请将numeric="yes"添加到索引定义中的 <field> 元素,然后将谓词更改为 [@value gt "5.0"]

最新更新