0

私はJackrabbitに比較的慣れていません。私たちのアプリケーションでは、JCR UUID 参照を使用して常に特定のドキュメントに直接アクセスするため、repository.xml (workspace.xml など) ファイル内の SearchIndex セクションをオンにしませんでした。Jackrabbit v2.2.1Oracleをリポジトリとして使用しています。ドキュメント メタデータ機能を使用してドキュメントに関するコンテキスト情報を保存し、メタデータを使用して選択した一連のドキュメントを取得できるようにするため、要件が拡大しています。

最初のステップとして、workspace.xml ファイルにデフォルトの SearchIndex セクションを追加し、JCR を再起動しました。

ログ ファイルにこのような行がたくさんあります。ワークスペース領域の下にインデックス フォルダーが作成されているのを確認しました。

2011-07-05 15:04:01.724 情報 [WebContainer: 0] MultiIndex.java:1204 インデックス作成... /vfs:metaData/21ee130e-978e-415f-bfd1-7aa03d91​​608c/vfs:attributes (3500)

こんな感じのフォルダ構成になっています。JCR でドキュメントを作成するとき、docType、uploadBy、contextValue などのタグを持つ複雑な XSD タイプによるドキュメントの一部としてメタデータ情報を指定します。

/ (root)
  /MyApp (sub-folder) 
      /documents/ (sub-folder) 
         /document-1.pdf (file) 
         /document-2.pdf (file) 
     /accounts/ (sub-folder) 
         /account.txt (file) 
        etc... 

次の XPath 式が機能します。

//jcr:root/vfs:metaData//*[vfs:attributes/vfs:docType='TAX_DOCS']

たとえば、「TAX_DOCS」、「TAX」の代わりに間違った値を指定すると、期待どおりにドキュメントが返されません。これは素晴らしいことです。これは、メタデータが期待どおりに正しく保存され、フィルター プロセスで正しく使用されていることを証明します。

このクエリの問題は、ルート フォルダーから検索を開始することですが、/MyApp/documents サブフォルダーのみから検索したいということです。だから私はこれを試しました:

//jcr:root/MyApp/documents//vfs:metaData//*[vfs:attributes/vfs:docType='TAX_DOCS']

何も返しません。それから私もこれを試しましたが、成功しませんでした。

//jcr:root/MyApp/documents//*[vfs:metaData/vfs:attributes/vfs:docType='TAX_DOCS']

それで、私は何を間違っていますか?設定する必要がある、または不足しているworkspace.xml構成はありますか?

どんな助けでも大歓迎です。

ありがとう、ジャック

4

1 に答える 1

2

最後のパス コンポーネント以外からダブル スラッシュを削除し、属性値に @ 表記を使用すると、次のようになります。

/jcr:root/MyApp/documents//*[vfs:attributes/@vfs:docType='TAX_DOCS']

// コンストラクトは、/ のように直接の子だけを探すのではなく、サブツリー全体を探します。JCR 仕様では、XPath クエリの最後のステップとして // 構造をサポートする実装のみが必要です。

于 2011-10-07T16:05:38.257 に答える