2

新しい 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>

国ごとの大学の数を知る必要がありますが、ファセットは 1 つの国を含むファイルの数、またはすべてのファイル内の場所の数を返します。つまり、データの最後の例では、2 でこれを返します。オプション。

最初のオプション (度数順を使用)

USA - 2 (少なくとも 1 つの場所に USA があるファイルの数) SPAIN - 1

2 番目のオプション (item-frequency を使用)

アメリカ - 3 スペイン - 1

結果が次のようになる場合:

USA - 2 (2 つのファイルには 2 つの大学しかないため) SPAIN - 1

これどうやってするの???

4

2 に答える 2

2

デフォルトのフラグメント頻度オプションの代わりに、アイテム頻度オプションが必要だと思います。いわゆる 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))

注: 未テストのコードですが、少なくとも重要な手順を示しています。また、国が同じフラグメント内に出現しないことも必要です。locationML 管理インターフェイスでフラグメント ルートとして追加する必要があります。

チッ!

于 2012-04-16T18:48:52.160 に答える
0

名前と国で cts:element-value-co-occurrences を試してください

于 2012-04-16T22:49:43.330 に答える