我正在使用带有新api搜索的facet进行搜索:搜索但我有下一个问题:
我的来源: 文件#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(与美国至少有一个位置的档案数量) 西班牙 - 1
第二个选项(使用项目频率)
美国 - 3 西班牙 - 1
结果应为:
美国 - 2(因为在两个档案中只有两所大学) 西班牙 - 1
我该怎么办?
答案 0 :(得分:2)
我认为你需要item-frequency选项,而不是默认的fragment-frequency选项。您将其作为所谓的facet-option添加到约束中。可以在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
作为片段根目录。
HTH!
答案 1 :(得分:0)
尝试使用名称和国家/地区的cts:element-value-co-occurrence