2017-01-11 5 views
0

質問された質問の文法が間違っている場合は申し訳ありません。Marklogicで重複要素の要素クエリを実行するにはどうすればよいですか?

問題: 問題のサンプルXMLとして以下のXMLを仮定します。

XML:

<publishers> 
    <aa> 
     <name>aaaaa</name> 
     <address>aaa addr</address> 
    </aa> 
    <bb> 
     <name>bbbb</name> 
     <address>bbb addr</address> 
    </bb> 
</publishers> 

私は<aa>

として<name>要素有する親要素の下に検索を実行したいが、それは考えるべきではありません<name>要素

<bb>下にMarkLogicでどのような方法があります同じことをする。

これを行う方法はいくつか分かっていますが、私はいくつかのオプションを探しています。

  1. ネームスペースを使用して - <aa><bb>要素に対して異なる名前空間を定義し、cts:element-value-query()メソッドを使用します。 cts:search
  2. は、おそらく最も簡単な方法は、要素の階層を尊重クエリを作成cts:element-queryを使用することであるfn:doc()//aa

答えて

2

ように、第1のパラメータを定義します。

この例では、このクエリは "name"要素内の "name"要素内の任意の名前を検索し、 "name"要素は他の場所では無視します。

cts:element-query(xs:QName("aa"), 
    cts:element-value-query(xs:QName("name"), "whatever") 
) 

もちろん、cts:element-query呼び出しをネストすると、より複雑なツリー制約を作成できます。

別のアプローチは、それは良い方法であるかどうかは、あなたがやろうとしている正確に何にも依存するがcts:path-range-query、 を使用することです。検索に含めるaaa/name要素への各パスの範囲インデックスが必要です。

cts:path-range-query("/publishers/aa/name", "=", "whatever") 
+2

cts:element-query()を使用するには、 "word position"と "element word position"を有効にするか、[filtered queries]を実行する必要があります( http://docs.marklogic.com/guide/performance/unfiltered#id_89797)。 –

0

要素の値を返すか、単にそれを使用して検索条件を絞りたいかどうかはわかりません。

フィールドを使用してそのパスを定義し、field-value-queryまたはfield-word-queryを使用することもできます。また、パフォーマンスをさらに向上させたい場合は、後でこの解決策に範囲索引を追加することができます。

関連する問題