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 to...@apache.org on 2018/09/24 12:53:24 UTC
svn commit: r1841838 - in
/jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search:
FulltextIndexConstants.java IndexDefinition.java
spi/query/FulltextIndexPlanner.java
Author: tommaso
Date: Mon Sep 24 12:53:23 2018
New Revision: 1841838
URL: http://svn.apache.org/viewvc?rev=1841838&view=rev
Log:
OAK-7739 - added support in oak-search
Modified:
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/FulltextIndexConstants.java
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
Modified: jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/FulltextIndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/FulltextIndexConstants.java?rev=1841838&r1=1841837&r2=1841838&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/FulltextIndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/FulltextIndexConstants.java Mon Sep 24 12:53:23 2018
@@ -334,4 +334,11 @@ public interface FulltextIndexConstants
* should be indexed
*/
String PROP_INDEX_NODE_TYPE = "nodeTypeIndex";
+
+ /**
+ * The property of an index. If the given node or property exists, then the
+ * index is used for queries; otherwise, it is not used (returns infinite
+ * cost). The value is: nodes, the path. For properties, the path of the node, then '@' property.
+ */
+ String USE_IF_EXISTS = "useIfExists";
}
Modified: jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java?rev=1841838&r1=1841837&r2=1841838&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java Mon Sep 24 12:53:23 2018
@@ -267,6 +267,8 @@ public class IndexDefinition implements
private final boolean syncPropertyIndexes;
+ private final String useIfExists;
+
private final boolean testMode;
public boolean isTestMode() {
@@ -421,12 +423,33 @@ public class IndexDefinition implements
this.nrtIndexMode = supportsNRTIndexing(defn);
this.syncIndexMode = supportsSyncIndexing(defn);
this.syncPropertyIndexes = definedRules.stream().anyMatch(ir -> !ir.syncProps.isEmpty());
+ this.useIfExists = getOptionalValue(defn, IndexConstants.USE_IF_EXISTS, null);
}
public NodeState getDefinitionNodeState() {
return definition;
}
+ public boolean isEnabled() {
+ if (useIfExists == null) {
+ return true;
+ }
+ if (!PathUtils.isValid(useIfExists)) {
+ return false;
+ }
+ NodeState nodeState = root;
+ for (String element : PathUtils.elements(useIfExists)) {
+ if (element.startsWith("@")) {
+ return nodeState.hasProperty(element.substring(1));
+ }
+ nodeState = nodeState.getChildNode(element);
+ if (!nodeState.exists()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public boolean isFullTextEnabled() {
return fullTextEnabled;
}
Modified: jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java?rev=1841838&r1=1841837&r2=1841838&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java (original)
+++ jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/query/FulltextIndexPlanner.java Mon Sep 24 12:53:23 2018
@@ -340,6 +340,10 @@ public class FulltextIndexPlanner {
private boolean wrongIndex() {
// REMARK: similar code is used in oak-core, PropertyIndex
// skip index if "option(index ...)" doesn't match
+ if (!definition.isEnabled()) {
+ return true;
+ }
+
PropertyRestriction indexName = filter.getPropertyRestriction(IndexConstants.INDEX_NAME_OPTION);
boolean wrong = false;
if (indexName != null && indexName.first != null) {