0

私は次のxmlファイルを持っています

<data>
<element attribute="10">element1</element>
<element attribute="7">element2</element>
</data>

「element」に要素範囲インデックスを作成し、「attribute」に属性範囲インデックスを作成して、次のクエリを実行しようとしました。

cts:search(collection(), cts:and-query((
 cts:element-range-query(xs:QName("element"), "=", "element1")
 cts:element-attribute-range-query(xs:QName("element"), xs:QName("attribute"), "<=", 7)

)))

結果として上記のフラグメントが表示されますが、実際には「element1」の属性は10であり、7を超えているため、結果として上記のフラグメントが表示されることはありません。

助けてください。

4

1 に答える 1

4

クエリは、本来あるべきことを行っています。element=element1 かつ element/@attribute<=7 のフラグメントに一致します。これらのステートメントは両方とも、サンプル XML に当てはまります。それらはその XML の同じ要素には当てはまりませんが、クエリはそれを保証しません。

ここでの秘訣は、インデックスがフラグメントを指していることを覚えておくことです。一般に、これはドキュメント全体が一致するかどうかを意味します。http://docs.marklogic.com/guide/search-dev/count_estimate#id_63216はこのトピックに触れており、http://developer.marklogic.com/blog/fragmented-thoughtsも役立つかもしれません。

必要な結果を得るには、さまざまな位置インデックスを有効にし、クエリをcts:element-query. または、ノード名を再検討して、このクエリに対してフラグメント固有になるようにすることもできます。または、フラグメント ルートの設定を検討することもできますが、それは最後の手段だと思います。

于 2013-01-23T18:59:36.903 に答える