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

Difference between indexNodeName and :nodeName in OAK Lucene Index

在节点类型定义上设置 indexNodeName=true 与定义具有属性 name=:nodeName 的虚拟节点名称 属性 之间有什么区别(如果有的话)。 indexNodeName定义如下:

Default to false. If set to true then index would also be created for node name. This would enable faster evaluation of queries involving constraints on Node name

将节点名称索引为 属性 旨在类似于 indexNodeName,但这并不意味着 "the same as"。 docs 对此并没有说太多:

The string :nodeName - this special case indexes node name as if it’s a virtual property of the node being indexed. Setting this along with nodeScopeIndex=true is akin to setting indexNodeName=true on indexing rule.

那么是需要设置两个设置还是只设置一个设置才能查询节点名。如果只是其中之一,哪一个和有什么区别? 示例:

//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%')

indexNodeName=true 是使用 name=:nodeName AND nodeScopeIndex=true.

定义 属性 的快捷方式

name=:nodeName 允许更灵活地(以有点复杂为代价)索引节点名称以用于其他用途——建议、拼写检查等。

因此,如果您只想使用这两种方法中的任何一种来查询节点名称,应该都能很好地工作(尽管在我看来,indexNodeName=true 更简单、更清晰)。 Otoh,如果您还希望节点名称显示为 suggestion/spellcheck 结果,那么您必须使用 属性 定义 name=:nodeName AND nodeScopeIndex=true AND useInSuggest=true.