2017-06-13 6 views
2

私は、特定の文字シーケンスで始まるファセットを表示する必要があります。これはできますか?Marklogicのファセットフィルタリング

例えば:

search:search戻り、ファセットに

<search:values-response name="facet" type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:search="http://marklogic.com/appservices/search"> 
<search:distinct-value frequency="846">DMPK</search:distinct-value> 
<search:distinct-value frequency="323">TNF</search:distinct-value> 
<search:distinct-value frequency="301">IL6</search:distinct-value> 
<search:distinct-value frequency="297">PAGE4</search:distinct-value> 
<search:distinct-value frequency="296">INS</search:distinct-value> 
<search:distinct-value frequency="291">PSD</search:distinct-value> 
<search:distinct-value frequency="280">EGFR</search:distinct-value> 
<search:distinct-value frequency="271">PAGE3</search:distinct-value> 
<search:distinct-value frequency="270">PAGE5</search:distinct-value> 
<search:distinct-value frequency="268">CD4</search:distinct-value> 
<metrics xmlns="http://marklogic.com/appservices/search"> 
<values-resolution-time>PT0.012602S</values-resolution-time> 
<total-time>PT0.014218S</total-time> 
</metrics> 
</search:values-response> 

を以下の場合は、私はさらにだけで始まるすべてのファセットがPAGE言う私を得ると言ってファセットをフィルタリングします。私はファセットが1000になる可能性があるので、私はすべてのファセットを取得した後、フィルタを適用することはできません。だから、ファセット自体を取得しながらフィルタを適用したいです。これはできますか?

答えて

1

はい、custom constraintcustom facet functionで作成できます。ボックスの外では、ファセットはワイルドカードではなく直接値比較のみに基づいています。カスタム制約はかなり定型(ドキュメントの例を参照)になり、そしてあなたのファセット機能は、ワイルドカードを実行します:

declare function my:start-facet(
    $constraint as element(search:constraint), 
    $query as cts:query?, 
    $facet-options as xs:string*, 
    $quality-weight as xs:double?, 
    $forests as xs:unsignedLong*) 
as item()* 
{ 
    cts:element-value-match(
    xs:QName("my:element"), "PAGE*", 
    $facet-options, $query, $quality-weight, $queries) 
}; 
+0

私はファセットを取得するためにファセットを取得するために 'search:values'を使用しています。これに対してカスタム制約を使用するにはどうすればよいですか? – Ravi

+0

@Ravi 'search:values'とカスタム制約は異なる機能です。 @ grtjnのようなバケットを 'search:values'に入れて、あなたが望むものと似たものを得ることもできますが、カスタマイズすることはできません。 – wst

+0

Hmm ..バケツは 'PAGE *'と言いたいときと同じように働くと思います。私はファセットを 'PAGE1 10'、' PAGE2 15'などにして、他のファセットを無視します「PAGE」から始める..私は私のUIデザインを再考する必要があると思う - 提案ありがとう – Ravi

1

あなたが先行開始文字を知っている場合は、次のような検索制約定義にバケットを使用することができます。

<bucket name="PAGE" ge="PAGE" lt="PAGF">PAGE</bucket> 

は、より動的な方法でそれらを取得するためにもhttp://docs.marklogic.com/guide/search-dev/appendixa#id_80046

を参照してくださいWSTで述べたように、カスタム制約が必要になります。

HTH!

+0

私は私のUIデザインを再考し、ファセットのページングとファセットのフィルタを分離していると思うと思う。しかし、 ml-constraints](https://github.com/grtjn/ml-constraints)コードを使用して、私のニーズに合わせてビットを修正してください - 提案に感謝します – Ravi