【问题标题】:CTS-Search unique element values for specific attributeCTS-搜索特定属性的唯一元素值
【发布时间】:2014-04-29 17:39:51
【问题描述】:

我正在寻找一个搜索例程,为我提供具有属性“Heineken”的元素 Brand 的所有唯一值的列表。所以在这种情况下;罐头,板条箱。

我尝试这样做:

let $query := cts:element-attribute-values(xs:QName("p:brand"), xs:QName("name"), 'Heineken')

for $temp in cts:search(fn:doc(), (cts:query($query)))

return fn:distinct-values($temp)

为此,我在品牌/名称上创建了一个:范围元素属性索引。

我的最终目标是使用 Heineken/Can 为每份文件创建一份梅洛独特价值的列表。在下面的例子中;玻璃。


星期六.xml

<thedrinksihad>
    <brand name='Heineken'>Can</brand>
    <brand name='Grolsch'>Bottle</brand>
    <brand name='Merlot'>Glass</brand>
</thedrinksihad>

星期日.xml

<thedrinksihad>
    <brand name='Heineken'>Crate</brand>
    <brand name='Grolsch'>Can</brand>
    <brand name='Merlot'>Bottle</brand>
</thedrinksihad>

【问题讨论】:

    标签: xquery marklogic


    【解决方案1】:

    可能有几种方法可以做到这一点,但由于您开始使用范围索引,因此此答案将使用它们。您需要在 xs:QName('p:brand') 上使用另一个范围索引。

    此查询将返回包含&lt;brand name='Heineken'&gt;Can&lt;/brand&gt; 和任何&lt;brand name='Merlot'&gt; 的所有文档。然后它过滤输出以仅选择 Merlot 品牌并采用该序列的 distinct-values

    let $merlots :=
      cts:search(//p:thedrinksihad,
          cts:and-query((
            cts:element-query(xs:QName('p:brand'),
              cts:element-attribute-range-query(xs:QName("p:brand"), xs:QName("name"), '=', 'Merlot')),
            cts:element-query(xs:QName('p:brand'),
              cts:and-query((
                cts:element-attribute-range-query(xs:QName("p:brand"), xs:QName("name"), '=', 'Heineken'),
                cts:element-range-query(xs:QName("p:brand"), '=', 'can'))))
          ))
        )/p:thedrinksihad/p:brand[@name eq 'Merlot']
    return distinct-values($merlots)
    

    请注意,cts:*-values 函数可能很棘手。这是一个看起来很理想的场景,因为它们只返回不同的值。但是,传递给cts:*-values 函数的查询运行“未过滤”,这意味着它将返回来自任何匹配片段的所有值。在这种情况下,这意味着匹配文档中的所有 &lt;brand&gt; 值,包括来自 &lt;brand name='Merlot'&gt; 之外的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多