0

我对 Jackrabbit 比较陌生。在我们的应用程序中,我们从未打开 repository.xml(如 workspace.xml)文件中的 SearchIndex 部分,因为我们总是使用 JCR UUID 引用直接转到给定文档。我们使用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 中创建文档时,我将元数据信息指定为文档的一部分,该文档是复杂的 XSD 类型,带有 docType、uploadBy、contextValue 等标签。

/ (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 回答