OAK Lucene索引中indexNodeName和:nodeName之间的区别

时间:2017-01-19 16:15:20

标签: lucene jackrabbit-oak

在节点类型定义上设置indexNodeName=true和使用属性name=:nodeName定义虚拟nodeName属性之间有什么区别(如果有)。 indexNodeName定义如下:

  

默认为false。如果设置为true,则还将为其创建索引   节点名称。这样可以更快地评估涉及的查询   节点名称的约束

索引节点名作为属性目标类似于indexNodeName,但这并不意味着"与"相同。 docs对此并没有多说:

  

字符串:nodeName - 此特殊情况将节点名称索引,就像它一样   被索引的节点的虚拟属性。将此设置为   nodeScopeIndex = true类似于在索引时设置indexNodeName = true   规则。

因此,需要设置两个或仅一个设置才能查询节点名称。如果只是其中之一,哪一个和有什么区别? 例子:

//element(*, app:Asset)[fn:name() = ‘kite’]
//*[jcr:like(fn:name(), ‘kite%’)]
//element(kite, app:Asset)
//element(*, dam:Asset)[(jcr:like(fn:lower-case(fn:name()), 'kite%')

1 个答案:

答案 0 :(得分:1)

indexNodeName=true是使用name=:nodeNamenodeScopeIndex=true定义属性的快捷方式。

name=:nodeName允许更灵活(以一点复杂性为代价)为其他用法索引节点名称 - 建议,拼写检查等。

因此,如果您只想使用其中一种方法查询节点名称应该运行良好(尽管,imo,indexNodeName=true更简单,更清晰)。 Otoh,如果您还希望节点名称显示为建议/拼写检查结果,那么您必须求助于name=:nodeName AND nodeScopeIndex=true AND useInSuggest=true的属性定义。< / p>