0

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

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

将节点名索引为属性的目的是类似于indexNodeName,但这并不意味着“相同”。文档对此并没有说太多:

字符串 :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%')
4

1 回答 1

2

indexNodeName=truename=:nodeName是使用AND进行属性定义的快捷方式nodeScopeIndex=true

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

因此,如果您只想使用其中任何一种方法查询节点名称应该可以正常工作(尽管 imoindexNodeName=true更简单、更简洁)。Otoh,如果您还希望节点名称显示为建议/拼写检查结果,那么您必须使用name=:nodeNameAND nodeScopeIndex=trueAND进行属性定义useInSuggest=true

于 2017-06-14T12:08:07.993 回答