2012-04-16 29 views
2

我做使用方面有新的API搜索的搜索:搜索,但我有一個問題:不要在重複方面數據和MarkLogic

我來源: 文件#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選項。

第一個選項(使用頻率順序)

USA - 2 西班牙(文件與至少一個位置與美國編號) - 1

第二個選項(使用項目頻)

USA - 3 西班牙 - 1

當結果應該是這樣的:

USA - 2 (因爲在這兩個文件中只有兩所大學) 西班牙 - 1

我該怎麼做?

回答

2

我認爲你需要項目頻率選項,而不是默認的片段頻率選項。您將它作爲所謂的方面選項添加到約束中。更多細節和例子可以在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!

0

嘗試cts:與名稱和國家共同出現的元素值

+0

我使用了項目頻率選項,但它不起作用。使用cts:element-value-co-occurrences,它只返回重複信息,但我需要列出所有大學的列表,包括只有一次的大學。 – damianfabian 2012-04-17 23:03:21