Xquery 不要在带有MarkLogic的方面中包含重复数据

Xquery 不要在带有MarkLogic的方面中包含重复数据,xquery,marklogic,Xquery,Marklogic,我正在使用facets和新的api search:search进行搜索,但我有下一个问题: 我的消息来源: 文件#1 耶鲁大学 美国 麻省理工学院 美国 桑坦德 西班牙 文件#2 麻省理工学院 美国 我需要知道每个国家的大学数量,但facet返回的是包含一个国家的文件数量或所有文件中的位置数量。因此,在最后一个数据示例中,它会返回带有2个选项的数据 第一个选项(使用频率顺序) USA-2(至少有一个位置位于USA的文件数) 西班牙-1 第二个选项(使用项目频率) 美国-3 西班牙-1 结

我正在使用facets和新的api search:search进行搜索,但我有下一个问题:

我的消息来源: 文件#1


耶鲁大学
美国
麻省理工学院
美国
桑坦德
西班牙
文件#2


麻省理工学院
美国
我需要知道每个国家的大学数量,但facet返回的是包含一个国家的文件数量或所有文件中的位置数量。因此,在最后一个数据示例中,它会返回带有2个选项的数据

第一个选项(使用频率顺序)

USA-2(至少有一个位置位于USA的文件数) 西班牙-1

第二个选项(使用项目频率)

美国-3 西班牙-1

结果应该是这样的:

美国-2(因为在这两个文件中只有两所大学) 西班牙-1


我该怎么做呢?

我想您需要的是项目频率选项,而不是默认的片段频率选项。将其作为所谓的镶嵌面选项添加到约束中。有关更多详细信息和示例,请访问CMC:

--编辑--

我想我没有把你的问题读得足够透彻。搜索库专注于搜索结果,而facet依赖于片段。改进计数的最简单方法是将
location
元素定义为片段根。然而,我不认为这真的返回了你正在寻找的数字。国家层面实际上只计算国家事件,而不计算国家内部的大学。使用搜索库无法实现这一点。不过,自己动手并不难:

for $country in cts:element-values(xs:QName('country'))
let $universities := cts:element-values(xs:QName('university'), (), cts:element-value-query(xs:QName('country'), $country))
return fn:concat($country, ' - ', fn:count($universities))
注意:未测试的代码,但它至少显示了基本步骤。它还要求各国不要出现在同一片段中。您需要在ML管理界面中添加
location
作为片段根


尝试cts:element-value与name和country同时出现

我使用了item-frequency选项,但它不起作用。如果cts:element值同时出现,它只返回重复信息,但是我需要一个包含所有大学的列表,包括只有一次的大学。
<root>
<location>
<university>
<name>MIT</name>
<country>USA</country>
</university>
</location>
</root>
for $country in cts:element-values(xs:QName('country'))
let $universities := cts:element-values(xs:QName('university'), (), cts:element-value-query(xs:QName('country'), $country))
return fn:concat($country, ' - ', fn:count($universities))