4

このクエリで特定のノード タイプのサブツリーをクエリしようとしています。

SELECT * FROM [my:Type] AS my WHERE PATH(my) LIKE '/content/subtree/%'

どういうわけか結果が得られません-ISDESCENDANTNODEの使用は機能します-しかし、サブツリーの内外に関係なく、合計5kを超える要素があるとすぐにクエリのパフォーマンスが低下します。

4

2 に答える 2

8

PATH(my)それは有効なJCR SQLまたはJCR 2.0 SQL-2文法ではないと思います。SQL-2 を使用する必要があります。

select * from [my:Type] where isdescendantnode('/content/subtree')

またはXPath

/jcr:root/content//element(*, my:Type)

これは、ノード タイプのインデックスのみを使用するため、処理が遅くなる可能性があります (パスはインデックス化されません)。より高速にする必要がある場合は、(たとえば) パスをプロパティとして保存し、対応する条件を追加できます。ただし、これにより高速移動操作が妨げられます。

于 2013-04-03T14:01:31.530 に答える
1

SQL2を使用している場合は、そのようにクエリを修正してください

SELECT * FROM [my:type] WHERE PATH([my:type]) LIKE '/content/subtree/%'

SQL の場合は、次を使用する必要があります。

SELECT * FROM my:Type WHERE jcr:path like '/content/subtree/%'

このクエリは、「/content/subtree/」の下のすべてのレベルのすべてのノードを検索しますが、「subtree」の下の 1 つのレベルでのみ検索する必要がある場合は、パフォーマンスを向上させるためにクエリに別のオプションを追加する必要があります。

SELECT * FROM my:Type WHERE jcr:path like '/content/subtree/%' and not jcr:path like 'content/subtree/%/%'

ここで詳細を見つけることができます: http://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-jcr-query-usecases.html#JCR.ChildNodeConstraint

于 2014-03-19T02:16:33.663 に答える