Apache Jackrabbit Oak 1.8 索引 - Lucene 不索引聚合节点中的二进制属性

Apache Jackrabbit Oak 1.8 Indexing - Lucene does not index binary properties in aggregated node

我有以下索引:

oak:index
      jcr:primaryType = nt:unstructured
      dms-lucene-fulltext-index
         compatVersion = 2
         async = async
         jcr:primaryType = oak:QueryIndexDefinition
         evaluatePathRestrictions = true
         type = lucene
         tags = fulltext
         aggregates
            jcr:primaryType = nt:unstructured
            nt:file
               jcr:primaryType = nt:unstructured
               include0
                  path = jcr:content
                  jcr:primaryType = nt:unstructured

我的文件夹中有以下文件节点:

folder
   jcr:created = 2018-02-24T14:32:09.550+01:00
   jcr:createdBy = 
   jcr:primaryType = nt:folder
   jcr:uuid = 5c3e4689-84e9-4e34-8b14-029f62172812
   test.txt
      jcr:created = 2018-02-24T14:32:09.674+01:00
      jcr:createdBy = 14
      jcr:primaryType = nt:file
      jcr:content
         jcr:encoding = utf-8
         jcr:lastModifiedBy = 14
         jcr:mimeType = text/plain; charset=utf-8
         jcr:data = the quick brown fox
         jcr:lastModified = 2018-02-24T14:32:09.673+01:00
         jcr:primaryType = nt:resource
         jcr:uuid = 52f224e8-db57-4879-9d6a-94862f65fb8d

如果我执行以下查询,我将得到该文件作为结果:

SELECT * FROM [nt:file] WHERE ISDESCENDANTNODE('/folder') AND CONTAINS(*,'plain')

所以 mimeType 在索引中。但是二进制文件不是,因为以下查询没有结果:

SELECT * FROM [nt:file] WHERE ISDESCENDANTNODE('/folder') AND CONTAINS(*,'fox')

我希望任何人都可以告诉我我在这里做错了什么,谢谢!

您还需要在定义中包含 nt:file 索引规则。

因此,只需在您的 def 中添加以下内容(以及您的聚合规则)

+ /oak:index/dms-lucene-fulltext-index
    + indexRules
         + nt:file

您不需要任何 属性 定义 - 索引规则是索引过程的起点 - 在被索引的节点匹配索引规则后将查询聚合规则。

经过长时间的调查,我终于找到了解决问题的方法。

我在 pom.xml 中添加了以下依赖项:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>RELEASE</version>
</dependency>

然后我的自定义 tika 配置也被加载并且二进制属性被索引!