You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2017/08/28 05:22:00 UTC
svn commit: r1806402 -
/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
Author: chetanm
Date: Mon Aug 28 05:21:59 2017
New Revision: 1806402
URL: http://svn.apache.org/viewvc?rev=1806402&view=rev
Log:
OAK-6574 - Lucene index: include/exclude key pattern list
Refactor valuePattern logic to a method
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java?rev=1806402&r1=1806401&r2=1806402&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java Mon Aug 28 05:21:59 2017
@@ -201,26 +201,8 @@ class IndexPlanner {
continue;
}
- if (!pd.valuePattern.matchesAll()){
- //So we have a valuePattern defined. So determine if
- //this index can return a plan based on values
- Set<String> values = ValuePatternUtil.getAllValues(pr);
- if (values == null) {
- // "is not null" condition, but we have a value pattern
- // that doesn't match everything
- // case of like search
- String prefix = ValuePatternUtil.getLongestPrefix(filter, name);
- if (!pd.valuePattern.matchesPrefix(prefix)) {
- // region match which is not fully in the pattern
- continue;
- }
- } else {
- // we have a value pattern, for example (a|b),
- // but we search (also) for 'c': can't match
- if (!pd.valuePattern.matchesAll(values)) {
- continue;
- }
- }
+ if (!matchesValuePattern(pr, pd)) {
+ continue;
}
//A property definition with weight == 0 is only meant to be used
@@ -292,6 +274,31 @@ class IndexPlanner {
return null;
}
+ private boolean matchesValuePattern(PropertyRestriction pr, PropertyDefinition pd) {
+ if (!pd.valuePattern.matchesAll()){
+ //So we have a valuePattern defined. So determine if
+ //this index can return a plan based on values
+ Set<String> values = ValuePatternUtil.getAllValues(pr);
+ if (values == null) {
+ // "is not null" condition, but we have a value pattern
+ // that doesn't match everything
+ // case of like search
+ String prefix = ValuePatternUtil.getLongestPrefix(filter, pr.propertyName);
+ if (!pd.valuePattern.matchesPrefix(prefix)) {
+ // region match which is not fully in the pattern
+ return false;
+ }
+ } else {
+ // we have a value pattern, for example (a|b),
+ // but we search (also) for 'c': can't match
+ if (!pd.valuePattern.matchesAll(values)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
private boolean wrongIndex() {
// REMARK: similar code is used in oak-core, PropertyIndex
// skip index if "option(index ...)" doesn't match