xquery - 使用 MarkLogic 时不要在构面中包含重复数据

标签 xquery marklogic

我正在使用新的 api search:search 使用分面进行搜索,但我遇到了下一个问题:

我的来源: 文件#1

<root>
<location>
<university>
<name>Yale</name>
<country>USA</country>
</university>
</location>
<location>
<university>
<name>MIT</name>
<country>USA</country>
</university>
</location>
<location>
<university>
<name>Santander</name>
<country>Spain</country>
</university>
</location>
</root>

文件#2

<root>
<location>
<university>
<name>MIT</name>
<country>USA</country>
</university>
</location>
</root>

我需要知道每个国家/地区的大学数量,但各个方面返回包含一个国家/地区的文件数量或所有文件中重复大学的位置数量,因此在最后一个数据示例中,它返回给我这个有 2 个选项。

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

美国 - 2(至少有一个位置位于美国的文件数量) 西类牙 - 1

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

美国 - 3 西类牙 - 1

当结果应该是这样的时候:

USA - 2(因为两个文件中只有两所大学) 西类牙 - 1

我该怎么做???

最佳答案

我认为您需要项目频率选项,而不是默认的片段频率选项。您将其作为所谓的分面选项添加到约束中。更多详细信息和示例可以在 CMC 上找到:http://community.marklogic.com/pubs/5.0/apidocs/SearchAPI.html#search:search

--编辑--

我想我没有足够彻底地阅读你的问题。搜索库侧重于搜索结果,分面则依赖于片段。提高计数的最简单方法是将 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 作为片段根。

呵呵!

关于xquery - 使用 MarkLogic 时不要在构面中包含重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176907/

相关文章:

marklogic - 节点 0.12.0 + Marklogic 8

marklogic - 在 Marklogic 中监控备份和恢复

xquery - 增加 xquery 请求的 Marklogic 超时

database - 有没有办法在 XQuery 中获取 MarkLogic 服务器中的所有数据库名称?

xpath - 在XQuery中查找有关最新元素的信息

xquery - 我怎样才能得到cts :values for elements with special attribute value

xquery - 使用 eXist-db 中的范围索引提高查询性能

sql-server - XQuery 获取属性列表

xml - xquery 文件扩展名

marklogic - MarkLogic 8-按路径索引排序