This is an automated email from the ASF dual-hosted git repository.
nfsantos pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new 5d2c7cedc2 OAK-11800 - Simplify code of full text indexer
5d2c7cedc2 is described below
commit 5d2c7cedc2dbf7d4a3ec2f543d9d12c1c5eba61a
Author: Nuno Santos <[email protected]>
AuthorDate: Thu Jul 10 15:30:44 2025 +0200
OAK-11800 - Simplify code of full text indexer
Simplify code of callback that collects results from aggregates: remove
workaround of using an AtomicBoolean to pass a value to a lambda and eliminate
some object allocation.
---
.../index/lucene/spi/IndexFieldProvider.java | 10 ++--
.../dynamicBoost/IndexFieldProviderImpl.java | 8 +--
.../oak/plugins/index/search/Aggregate.java | 4 +-
.../oak/plugins/index/search/IndexDefinition.java | 6 +-
.../search/spi/editor/FulltextDocumentMaker.java | 68 +++++++++++-----------
5 files changed, 47 insertions(+), 49 deletions(-)
diff --git
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/IndexFieldProvider.java
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/IndexFieldProvider.java
index 02440caba2..59666bab99 100644
---
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/IndexFieldProvider.java
+++
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/IndexFieldProvider.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.lucene.document.Field;
import org.jetbrains.annotations.NotNull;
-import java.util.Collections;
+import java.util.List;
import java.util.Set;
/**
* Implementations of this interface would get callbacks while indexing
documents. It's the responsibility
@@ -36,13 +36,13 @@ public interface IndexFieldProvider {
*/
IndexFieldProvider DEFAULT = new IndexFieldProvider() {
@Override
- public Iterable<Field> getAugmentedFields(String path, NodeState
document, NodeState indexDefinition) {
- return Collections.EMPTY_LIST;
+ public @NotNull Iterable<Field> getAugmentedFields(String path,
NodeState document, NodeState indexDefinition) {
+ return List.of();
}
@Override
- public Set<String> getSupportedTypes() {
- return Collections.EMPTY_SET;
+ public @NotNull Set<String> getSupportedTypes() {
+ return Set.of();
}
};
diff --git
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/dynamicBoost/IndexFieldProviderImpl.java
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/dynamicBoost/IndexFieldProviderImpl.java
index 173662e8a5..3d953fc0e9 100644
---
a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/dynamicBoost/IndexFieldProviderImpl.java
+++
b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/dynamicBoost/IndexFieldProviderImpl.java
@@ -52,8 +52,8 @@ public class IndexFieldProviderImpl implements
IndexFieldProvider {
private static final String NT_DAM_ASSET = "dam:Asset";
@Override
- public Set<String> getSupportedTypes() {
- Set<String> supportedTypes = new HashSet<String>();
+ public @NotNull Set<String> getSupportedTypes() {
+ Set<String> supportedTypes = new HashSet<>();
supportedTypes.add(NT_DAM_ASSET);
return supportedTypes;
}
@@ -65,14 +65,14 @@ public class IndexFieldProviderImpl implements
IndexFieldProvider {
for (String nodeName : dynaTags.getChildNodeNames()) {
NodeState dynaTag = dynaTags.getChildNode(nodeName);
String dynaTagName =
dynaTag.getProperty(PREDICTED_TAG_NAME).getValue(Type.STRING);
- Double dynaTagConfidence =
dynaTag.getProperty(PREDICTED_TAG_CONFIDENCE).getValue(Type.DOUBLE);
+ double dynaTagConfidence =
dynaTag.getProperty(PREDICTED_TAG_CONFIDENCE).getValue(Type.DOUBLE);
List<String> tokens = new
ArrayList<>(splitForIndexing(dynaTagName));
if (tokens.size() > 1) { // Actual name not in tokens
tokens.add(dynaTagName);
}
for (String token : tokens) {
- if (token.length() > 0) {
+ if (!token.isEmpty()) {
fields.add(new AugmentedField(PREDICTED_TAGS_REL_PATH +
token.toLowerCase(), dynaTagConfidence));
}
}
diff --git
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/Aggregate.java
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/Aggregate.java
index 1ed787a3e3..7aa4c0ad04 100644
---
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/Aggregate.java
+++
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/Aggregate.java
@@ -72,7 +72,7 @@ public class Aggregate {
this.includes = List.copyOf(includes);
this.reAggregationLimit = recursionLimit;
this.relativeNodeIncludes = findRelativeNodeIncludes(includes);
- this.nodeAggregates = includes.stream().anyMatch(input -> input
instanceof NodeInclude);
+ this.nodeAggregates = this.includes.stream().anyMatch(input -> input
instanceof NodeInclude);
}
public List<? extends Include> getIncludes() {
@@ -176,7 +176,7 @@ public class Aggregate {
result.nextSet(nextSet);
}
}
- if (nextSet !=null && !nextSet.isEmpty()) {
+ if (nextSet != null && !nextSet.isEmpty()) {
collectAggregates(cne.getNodeState(), nextSet.toArray(new
Matcher[0]), collector);
// Clear the set so it can be reused. This reduces object
allocation overhead.
nextSet.clear();
diff --git
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
index 7a7d1bd4bf..318fd30330 100644
---
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
+++
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
@@ -184,10 +184,6 @@ public class IndexDefinition implements
Aggregate.AggregateMapper {
public static final String CREATION_TIMESTAMP = "creationTimestamp";
public static final String REINDEX_COMPLETION_TIMESTAMP =
"reindexCompletionTimestamp";
- /**
- * Property to store paths for documents failed during index updates.
- */
- public static final String FAILED_DOC_PATHS = "failedDocPaths";
/**
* Meta property which provides the unique id
@@ -827,7 +823,7 @@ public class IndexDefinition implements
Aggregate.AggregateMapper {
}
includes.add(new Aggregate.NodeInclude(this, primaryType,
path, relativeNode));
}
- aggregateMap.put(nodeType, new Aggregate(nodeType,
List.copyOf(includes), recursionLimit));
+ aggregateMap.put(nodeType, new Aggregate(nodeType, includes,
recursionLimit));
}
return Map.copyOf(aggregateMap);
diff --git
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/editor/FulltextDocumentMaker.java
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/editor/FulltextDocumentMaker.java
index 100a73c4d3..a1ab08536d 100644
---
a/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/editor/FulltextDocumentMaker.java
+++
b/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/spi/editor/FulltextDocumentMaker.java
@@ -43,7 +43,6 @@ import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;
@@ -182,13 +181,12 @@ public abstract class FulltextDocumentMaker<D> implements
DocumentMaker<D> {
facet |= pd.facet;
}
- boolean[] dirties = indexAggregates(path, document, state);
- dirty |= dirties[0]; // any (aggregate) indexing happened
- facet |= dirties[1]; // facet indexing during (index-time) aggregation
+ ResultCollector resultCollector = indexAggregates(path, document,
state);
+ dirty |= resultCollector.dirtyFlag; // any (aggregate) indexing
happened
+ facet |= resultCollector.facetFlag; // facet indexing during
(index-time) aggregation
dirty |= indexNullCheckEnabledProps(path, document, state);
dirty |= indexFunctionRestrictions(path, document, state);
dirty |= indexNotNullCheckEnabledProps(path, document, state);
-
dirty |= augmentCustomFields(path, document, state);
// Check if a node having a single property was modified/deleted
@@ -565,37 +563,41 @@ public abstract class FulltextDocumentMaker<D> implements
DocumentMaker<D> {
/*
* index aggregates on a certain path
*/
- private boolean[] indexAggregates(final String path, final D document,
final NodeState state) {
- final AtomicBoolean dirtyFlag = new AtomicBoolean();
- final AtomicBoolean facetFlag = new AtomicBoolean();
- indexingRule.getAggregate().collectAggregates(state, new
Aggregate.ResultCollector() {
- @Override
- public void onResult(Aggregate.NodeIncludeResult result) {
- boolean dirty = indexAggregatedNode(path, document, result);
- if (dirty) {
- dirtyFlag.set(true);
- }
- }
+ private ResultCollector indexAggregates(final String path, final D
document, final NodeState state) {
+ ResultCollector resultCollector = new ResultCollector(path, document,
state);
+ indexingRule.getAggregate().collectAggregates(state, resultCollector);
+ return resultCollector;
+ }
- @Override
- public void onResult(Aggregate.PropertyIncludeResult result) {
- boolean dirty = false;
- if (result.pd.ordered) {
- dirty |= addTypedOrderedFields(document,
result.propertyState,
- result.propertyPath, result.pd);
- }
- dirty |= indexProperty(path, document, state,
result.propertyState,
- result.propertyPath, result.pd);
+ private class ResultCollector implements Aggregate.ResultCollector {
+ private final String path;
+ private final D document;
+ private final NodeState state;
+ private boolean dirtyFlag = false;
+ private boolean facetFlag = false;
+
+ ResultCollector(String path, D document, NodeState state) {
+ this.path = path;
+ this.document = document;
+ this.state = state;
+ }
- if (result.pd.facet) {
- facetFlag.set(true);
- }
- if (dirty) {
- dirtyFlag.set(true);
- }
+ @Override
+ public void onResult(Aggregate.NodeIncludeResult result) {
+ dirtyFlag |= indexAggregatedNode(path, document, result);
+ }
+
+ @Override
+ public void onResult(Aggregate.PropertyIncludeResult result) {
+ if (result.pd.ordered) {
+ dirtyFlag |= addTypedOrderedFields(document,
result.propertyState, result.propertyPath, result.pd);
}
- });
- return new boolean[]{dirtyFlag.get(), facetFlag.get()};
+ dirtyFlag |= indexProperty(path, document, state,
result.propertyState, result.propertyPath, result.pd);
+
+ if (result.pd.facet) {
+ facetFlag = true;
+ }
+ }
}
/*