4

このような XML ドキュメントがあります。

  <Authors>
      <Author>
        <name>R.N Tagore</name>
        <book>Gitanjli</book>
      </Author>
      <Author>
        <name>Premchand</name>
        <book>Panch Parameshvar</book>
      </Author>
      <Author>
        <name>H.R Bacchan</name>
        <book>Madhushala</book>
      </Author>
      <Author>
        <name>Premchand</name>
        <book>Gaban</book>
      </Author>
      <Author>
        <name>Premchand</name>
        <book>Nirmala</book>
      </Author>
      <Author>
        <name>Premchand</name>
        <book>Nirmala</book>
      </Author>
  </Authors>

上記の XML から、著者名の個別のリストが必要です。
このために、次のようなクエリを書くことができます。

fn:distinct-values(cts:search(fn:doc()//pa:Author/pa:name,cts:and-query(())))

上記のコードが行うことは、作成者名の結果を取得し、次にfn:distinct-values()関数がその結果セットから個別の作成者名をフィルター処理することです。現在のシナリオでは、XML のデータは 6 しかないため問題なく動作しますが、データが非常に多い場合は 50 lac としましょう

cts:search(fn:doc()//pa:Author/pa:name,cts:and-query(()))

クエリの上記の部分では、50 lac の要素をメモリにキャッシュしようとしているため、 XDMP-EXPNTREECACHEFULL例外が発生します。cts:searchまたはsearch:search API
を使用して個別の著者名のみを取得するには、あなたの助けが必要です。最初に結果セットを取得してから、 fn:distinct-values()を使用してその結果セットから個別のレコードを抽出したくありません。 ありがとう、

4

2 に答える 2

5

この質問は、 MarkLogicコミュニティWebサイトのフロントページにあるNinjaチュートリアルの途中で対処されています。これを読むことをお勧めします。

http://community.marklogic.com/try/ninja/page7を参照してください

于 2012-05-11T14:51:53.990 に答える