Skip to content

Commit 9b2ab90

Browse files
committed
Merge branch 'branch_10_2' of github.com:apache/lucene into branch_10_2
2 parents 50740f3 + 4984c0c commit 9b2ab90

File tree

5 files changed

+7
-147
lines changed

5 files changed

+7
-147
lines changed

lucene/CHANGES.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ Improvements
8989
mergeFactor segments together when the merge is below the min merge size.
9090
(Adrien Grand)
9191

92-
* GITHUB#14154: Add UnwrappingReuseStrategy for AnalyzerWrapper that consults
93-
the wrapped analyzer's strategy to decide if components can be reused or need
94-
to be updated. (Mayya Sharipova)
95-
9692
* GITHUB#14192: Added support for RegExp to handle case insensitive matching
9793
across the full set of Unicode characters. (John Wagster)
9894

lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ public void close() {
342342
* TokenFilter} which also serves as the {@link TokenStream} returned by {@link
343343
* Analyzer#tokenStream(String, Reader)}.
344344
*/
345-
public static class TokenStreamComponents {
345+
public static final class TokenStreamComponents {
346346
/** Original source of the tokens. */
347347
protected final Consumer<Reader> source;
348348

lucene/core/src/java/org/apache/lucene/analysis/AnalyzerWrapper.java

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
* @since 4.0.0
4242
*/
4343
public abstract class AnalyzerWrapper extends Analyzer {
44+
4445
/**
4546
* Creates a new AnalyzerWrapper with the given reuse strategy.
4647
*
@@ -52,10 +53,7 @@ public abstract class AnalyzerWrapper extends Analyzer {
5253
* @see #getReuseStrategy()
5354
*/
5455
protected AnalyzerWrapper(ReuseStrategy reuseStrategy) {
55-
super(
56-
reuseStrategy instanceof DelegatingAnalyzerWrapper.DelegatingReuseStrategy
57-
? reuseStrategy
58-
: new UnwrappingReuseStrategy(reuseStrategy));
56+
super(reuseStrategy);
5957
}
6058

6159
/**
@@ -119,10 +117,7 @@ protected Reader wrapReaderForNormalization(String fieldName, Reader reader) {
119117

120118
@Override
121119
protected final TokenStreamComponents createComponents(String fieldName) {
122-
TokenStreamComponents wrappedComponents =
123-
getWrappedAnalyzer(fieldName).createComponents(fieldName);
124-
TokenStreamComponents wrapperComponents = wrapComponents(fieldName, wrappedComponents);
125-
return new TokenStreamComponentsWrapper(wrapperComponents, wrappedComponents);
120+
return wrapComponents(fieldName, getWrappedAnalyzer(fieldName).createComponents(fieldName));
126121
}
127122

128123
@Override
@@ -156,63 +151,4 @@ protected final Reader initReaderForNormalization(String fieldName, Reader reade
156151
protected final AttributeFactory attributeFactory(String fieldName) {
157152
return getWrappedAnalyzer(fieldName).attributeFactory(fieldName);
158153
}
159-
160-
/**
161-
* A {@link org.apache.lucene.analysis.Analyzer.ReuseStrategy} that checks the wrapped analyzer's
162-
* strategy for reusability. If the wrapped analyzer's strategy returns null, components need to
163-
* be re-created.
164-
*/
165-
public static final class UnwrappingReuseStrategy extends ReuseStrategy {
166-
private final ReuseStrategy reuseStrategy;
167-
168-
public UnwrappingReuseStrategy(ReuseStrategy reuseStrategy) {
169-
this.reuseStrategy = reuseStrategy;
170-
}
171-
172-
@Override
173-
public TokenStreamComponents getReusableComponents(Analyzer analyzer, String fieldName) {
174-
if (analyzer instanceof AnalyzerWrapper wrapper) {
175-
final Analyzer wrappedAnalyzer = wrapper.getWrappedAnalyzer(fieldName);
176-
if (wrappedAnalyzer.getReuseStrategy().getReusableComponents(wrappedAnalyzer, fieldName)
177-
== null) {
178-
return null;
179-
}
180-
}
181-
return reuseStrategy.getReusableComponents(analyzer, fieldName);
182-
}
183-
184-
@Override
185-
public void setReusableComponents(
186-
Analyzer analyzer, String fieldName, TokenStreamComponents components) {
187-
reuseStrategy.setReusableComponents(analyzer, fieldName, components);
188-
189-
if (analyzer instanceof AnalyzerWrapper wrapper) {
190-
assert components instanceof TokenStreamComponentsWrapper;
191-
final TokenStreamComponentsWrapper wrapperComponents =
192-
(TokenStreamComponentsWrapper) components;
193-
final Analyzer wrappedAnalyzer = wrapper.getWrappedAnalyzer(fieldName);
194-
wrappedAnalyzer
195-
.getReuseStrategy()
196-
.setReusableComponents(
197-
wrappedAnalyzer, fieldName, wrapperComponents.getWrappedComponents());
198-
}
199-
}
200-
}
201-
202-
/**
203-
* A {@link Analyzer.TokenStreamComponents} that decorates the wrapper with access to the wrapped
204-
* components.
205-
*/
206-
static final class TokenStreamComponentsWrapper extends TokenStreamComponents {
207-
private final TokenStreamComponents wrapped;
208-
209-
TokenStreamComponentsWrapper(TokenStreamComponents wrapper, TokenStreamComponents wrapped) {
210-
super(wrapper.getSource(), wrapper.getTokenStream());
211-
this.wrapped = wrapped;
212-
}
213-
214-
TokenStreamComponents getWrappedComponents() {
215-
return wrapped;
216-
}
217-
}
218154
}

lucene/core/src/java/org/apache/lucene/analysis/DelegatingAnalyzerWrapper.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,7 @@ protected final Reader wrapReaderForNormalization(String fieldName, Reader reade
6969
return super.wrapReaderForNormalization(fieldName, reader);
7070
}
7171

72-
/**
73-
* A {@link org.apache.lucene.analysis.Analyzer.ReuseStrategy} that delegates to the wrapped
74-
* analyzer's strategy for reusability of components.
75-
*/
76-
static final class DelegatingReuseStrategy extends ReuseStrategy {
72+
private static final class DelegatingReuseStrategy extends ReuseStrategy {
7773
DelegatingAnalyzerWrapper wrapper;
7874
private final ReuseStrategy fallbackStrategy;
7975

lucene/core/src/test/org/apache/lucene/analysis/TestAnalyzerWrapper.java

Lines changed: 2 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,8 @@
1717

1818
package org.apache.lucene.analysis;
1919

20-
import static org.apache.lucene.analysis.Analyzer.PER_FIELD_REUSE_STRATEGY;
21-
2220
import java.io.IOException;
2321
import java.util.concurrent.atomic.AtomicBoolean;
24-
import org.apache.lucene.analysis.Analyzer.ReuseStrategy;
25-
import org.apache.lucene.analysis.Analyzer.TokenStreamComponents;
2622
import org.apache.lucene.tests.analysis.CannedTokenStream;
2723
import org.apache.lucene.tests.util.LuceneTestCase;
2824

@@ -44,7 +40,7 @@ protected TokenStreamComponents createComponents(String fieldName) {
4440
}
4541
};
4642

47-
Analyzer wrapper =
43+
Analyzer wrapped =
4844
new AnalyzerWrapper(analyzer.getReuseStrategy()) {
4945
@Override
5046
protected Analyzer getWrappedAnalyzer(String fieldName) {
@@ -59,73 +55,9 @@ protected TokenStreamComponents wrapComponents(
5955
}
6056
};
6157

62-
try (TokenStream ts = wrapper.tokenStream("", "text")) {
58+
try (TokenStream ts = wrapped.tokenStream("", "text")) {
6359
assert ts != null;
6460
assertTrue(sourceCalled.get());
6561
}
6662
}
67-
68-
/**
69-
* Test that {@link AnalyzerWrapper.UnwrappingReuseStrategy} consults the wrapped analyzer's reuse
70-
* strategy if components can be reused or need to be updated.
71-
*/
72-
public void testUnwrappingReuseStrategy() {
73-
AtomicBoolean reuse = new AtomicBoolean(true);
74-
75-
final ReuseStrategy wrappedAnalyzerStrategy =
76-
new ReuseStrategy() {
77-
@Override
78-
public TokenStreamComponents getReusableComponents(Analyzer analyzer, String fieldName) {
79-
if (reuse.get() == false) {
80-
return null;
81-
} else {
82-
return (TokenStreamComponents) getStoredValue(analyzer);
83-
}
84-
}
85-
86-
@Override
87-
public void setReusableComponents(
88-
Analyzer analyzer, String fieldName, TokenStreamComponents components) {
89-
setStoredValue(analyzer, components);
90-
}
91-
};
92-
Analyzer wrappedAnalyzer =
93-
new Analyzer(wrappedAnalyzerStrategy) {
94-
@Override
95-
protected TokenStreamComponents createComponents(String fieldName) {
96-
return new TokenStreamComponents(r -> {}, new CannedTokenStream());
97-
}
98-
};
99-
100-
AnalyzerWrapper wrapperAnalyzer =
101-
new AnalyzerWrapper(PER_FIELD_REUSE_STRATEGY) {
102-
@Override
103-
protected Analyzer getWrappedAnalyzer(String fieldName) {
104-
return wrappedAnalyzer;
105-
}
106-
107-
@Override
108-
protected TokenStreamComponents wrapComponents(
109-
String fieldName, TokenStreamComponents components) {
110-
return new TokenStreamComponents(
111-
components.getSource(), new LowerCaseFilter(components.getTokenStream()));
112-
}
113-
};
114-
115-
TokenStream ts = wrapperAnalyzer.tokenStream("", "text");
116-
TokenStream ts2 = wrapperAnalyzer.tokenStream("", "text");
117-
assertEquals(ts2, ts);
118-
119-
reuse.set(false);
120-
TokenStream ts3 = wrapperAnalyzer.tokenStream("", "text");
121-
assertNotSame(ts3, ts2);
122-
TokenStream ts4 = wrapperAnalyzer.tokenStream("", "text");
123-
assertNotSame(ts4, ts3);
124-
125-
reuse.set(true);
126-
TokenStream ts5 = wrapperAnalyzer.tokenStream("", "text");
127-
assertEquals(ts5, ts4);
128-
TokenStream ts6 = wrapperAnalyzer.tokenStream("", "text");
129-
assertEquals(ts6, ts5);
130-
}
13163
}

0 commit comments

Comments
 (0)