[ 
https://issues.apache.org/jira/browse/OAK-5707?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15872536#comment-15872536
 ] 

David Gonzalez edited comment on OAK-5707 at 2/17/17 9:16 PM:
--------------------------------------------------------------

Including helpful offline conversations w/ Vikas. 

The following require review for correctness, and are added here to help shape 
the discussion and for convenience and should NOT be considered correct until 
the review has been finalized.

* Aggregate instruct Oak to  fulltext-index any property found under the 
provided path pattern (ex. */*/*) (avoiding complication of how it recurses 
through types... )
** By default all String and String[] properties are candidates for 
aggregation, however other property types can be specified at the aggregation  
level.
* Specific property index definitions defined under indexRules, are about "how 
to index a specific property"
** The effected property is defined via a) a relative property path or b) via a 
regex property path match from the <nodeType> the indexRules applies to.
* A property that can be reached by an aggregate rule pattern is same as that 
property having a `indexRules/<nodeType>/properties/myProp@nodeScopeIndex=true`
** The advantages of ALSO defining an indexRule for a property covered by an 
aggregate are:
*** The property can also be marked as a propertyIndex which allows for more 
performation property based equality matches
*** The property can be marked for special use (ex. useInSuggest, 
useInSpellecheck, boost, etc.) which may (depending on the applied special use 
properties) how it behaves in the aggregated search.

* `analyzed=true` in an indexRules prop def (say for `jcr:content/jcr:title`) 
allows for `...FROM [app:Page] where CONTAINS([jcr:content/jcr:title], 'foo')`
** TBD what special user props are applicable to this (if any?)
* 'propertyIndex=true` is for the condition you were asking at first `WHERE 
[jcr:content/jcr:title]='foo'`
** If the property is a candidate for aggregates or nodeScopeIndex (which as 
noted are ~ equivalent), equality property conditions (WHERE 
[jcr:content/jcr:title]='foo') may still appear fast and not report a traversal 
warning, as Oak is able to leverage the internal aggregate index to quickly 
isolate matches. That being said, for property equality checks, it is always as 
fast (if not faster) to defined an indexRule for the property with 
`propertyIndex=true`
** TBD clearly describe the considerations of equality matches when only using 
the aggregate index.
* aggregate and nodeScopeIndex are intended to roll content up into the index's 
"nodeType" index, so that content will be candidate for fulltext searchs 
against that node (vs against a specific property) or rather: `WHERE 
CONTAINS(*, 'foo')`
 * The `excludeFromAggregation` prop "disables" aggregate indexing of a prop 
that matches a prop def having `excludeFromAggregation`



was (Author: empire29):
Including helpful offline conversations w/ Vikas.

The following require review for correctness, and are added here to help shape 
the discussion and for convenience.

* Aggregate instruct Oak to  fulltext-index any property found under the 
provided path pattern (ex. */*/*) (avoiding complication of how it recurses 
through types... )
** By default all String and String[] properties are candidates for 
aggregation, however other property types can be specified at the aggregation  
level.
* Specific property index definitions defined under indexRules, are about "how 
to index a specific property"
** The effected property is defined via a) a relative property path or b) via a 
regex property path match from the <nodeType> the indexRules applies to.
* A property that can be reached by an aggregate rule pattern is same as that 
property having a `indexRules/<nodeType>/properties/myProp@nodeScopeIndex=true`
** The advantages of ALSO defining an indexRule for a property covered by an 
aggregate are:
*** The property can also be marked as a propertyIndex which allows for more 
performation property based equality matches
*** The property can be marked for special use (ex. useInSuggest, 
useInSpellecheck, boost, etc.) which may (depending on the applied special use 
properties) how it behaves in the aggregated search.

* `analyzed=true` in an indexRules prop def (say for `jcr:content/jcr:title`) 
allows for `...FROM [app:Page] where CONTAINS([jcr:content/jcr:title], 'foo')`
** TBD what special user props are applicable to this (if any?)
* 'propertyIndex=true` is for the condition you were asking at first `WHERE 
[jcr:content/jcr:title]='foo'`
** If the property is a candidate for aggregates or nodeScopeIndex (which as 
noted are ~ equivalent), equality property conditions (WHERE 
[jcr:content/jcr:title]='foo') may still appear fast and not report a traversal 
warning, as Oak is able to leverage the internal aggregate index to quickly 
isolate matches. That being said, for property equality checks, it is always as 
fast (if not faster) to defined an indexRule for the property with 
`propertyIndex=true`
** TBD clearly describe the considerations of equality matches when only using 
the aggregate index.
* aggregate and nodeScopeIndex are intended to roll content up into the index's 
"nodeType" index, so that content will be candidate for fulltext searchs 
against that node (vs against a specific property) or rather: `WHERE 
CONTAINS(*, 'foo')`
 * The `excludeFromAggregation` prop "disables" aggregate indexing of a prop 
that matches a prop def having `excludeFromAggregation`


> [Oak lucene indexes] Clarify aggregates, nodeScopeIndex, propertyIndex, 
> analyzed
> --------------------------------------------------------------------------------
>
>                 Key: OAK-5707
>                 URL: https://issues.apache.org/jira/browse/OAK-5707
>             Project: Jackrabbit Oak
>          Issue Type: Documentation
>            Reporter: David Gonzalez
>            Assignee: Vikas Saurabh
>
> Oak lucene documentation would benefit from clarifying the relationships and 
> expect behaviors around aggregates, nodeScopeIndex, propertyIndex and 
> analyzed.
> These features have some overlap in what they do and/or augment one another, 
> but to the lay-developer it is unclear how these work in concern and/or the 
> implications of these using the various features.
> Its worth remembering many developers are under the mindset (shifting from 
> jackrabbit 2 -> oak) that oak indexing requires explicit inclusion of content 
> into search results; thus implicit content inclusion into indexes via 
> generalized aggregations (vs named properties) is unclear/unexpected to many.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to