[
https://issues.apache.org/jira/browse/OAK-9625?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17713112#comment-17713112
]
Thomas Mueller commented on OAK-9625:
-------------------------------------
Improved documentation in
https://github.com/apache/jackrabbit-oak/commit/941050b89d6db8332ecf30ef56b8bb00a9a54ea7
> Support ordered index for first value of a multi-valued property, node name,
> and path
> -------------------------------------------------------------------------------------
>
> Key: OAK-9625
> URL: https://issues.apache.org/jira/browse/OAK-9625
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: indexing, lucene, query
> Reporter: Thomas Mueller
> Assignee: Thomas Mueller
> Priority: Major
> Fix For: 1.42.0
>
>
> Keyset pagination
> https://jackrabbit.apache.org/oak/docs/query/query-engine.html#Keyset_Pagination
> requires ordered indexing on a property.
> If all we have is a property "x", which is set on "nt:base" (or a similar
> node type), then an ordered index on the property "x" can be used for
> pagination. However, if the property is sometimes multi-valued, then it's not
> possible, because we don't support ordered indexes on multi-valued properties.
> {noformat}
> /jcr:root//element(*, nt:base)
> [jcr:first(@alias) >= $lastEntry]
> order by jcr:first(@alias), @jcr:path
> /oak:index/aliasIndex
> - type = lucene
> - compatVersion = 2
> - async = async
> - includedPaths = [ "/" ]
> - queryPaths = [ "/" ]
> + indexRules
> + nt:base
> + properties
> + firstAlias
> - function = "first([alias])"
> - propertyIndex = true
> - ordered = true
> {noformat}
> If we have a property that is set on a mixin type (or primary node type),
> then the index can be much smaller, as we only need to index that node type.
> However, even here we need a property to do pagination. One option is to
> order by the lower case version of the name. However, this is quite strange.
> Also, the node name may not be unique, which complicates things further. It
> would be good if we can define an ordered index on the path itself (which is
> unique).
> {noformat}
> select [jcr:path], * from [nt:file]
> where path() >= $lastEntry
> and isdescendantnode(a, '/content')
> order by path()
> /oak:index/fileIndex
> - type = lucene
> - compatVersion = 2
> - async = async
> - includedPaths = [ "/content" ]
> - queryPaths = [ "/content" ]
> + indexRules
> + nt:file
> + properties
> + path
> - function = "path()"
> - propertyIndex = true
> - ordered = true
> {noformat}
> It would be good if ordering by node name would use the function index. Test
> case:
> {noformat}
> select [jcr:path], * from [nt:file] as a
> where name(a) >= $lastEntry
> and isdescendantnode(a, '/content')
> order by name(a), [jcr:path]
> /oak:index/fileIndex
> - type = lucene
> - compatVersion = 2
> - async = async
> - includedPaths = [ "/content" ]
> - queryPaths = [ "/content" ]
> + indexRules
> + nt:file
> + properties
> + nodeName
> - function = "name()"
> - propertyIndex = true
> - ordered = true
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)