This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new c0c219e3746 Extensibility: Make field/document analysis handlers
extensible (#5279)
c0c219e3746 is described below
commit c0c219e374611e0edc475c0f793c9bd688b13292
Author: David Smiley <[email protected]>
AuthorDate: Fri Nov 6 00:16:07 2026 -0500
Extensibility: Make field/document analysis handlers extensible (#5279)
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
---
.../org/apache/solr/handler/AnalysisRequestHandlerBase.java | 10 ++++++++++
.../apache/solr/handler/DocumentAnalysisRequestHandler.java | 6 +++---
.../org/apache/solr/handler/FieldAnalysisRequestHandler.java | 9 ++++-----
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git
a/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
b/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
index 5820879c06b..47540f11a04 100644
--- a/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
+++ b/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
@@ -156,6 +156,16 @@ public abstract class AnalysisRequestHandlerBase extends
RequestHandlerBase {
return namedList;
}
+ /** The analyzer used to analyze index-time values of the given field type.
*/
+ protected Analyzer getIndexAnalyzer(FieldType fieldType) {
+ return fieldType.getIndexAnalyzer();
+ }
+
+ /** The analyzer used to analyze query-time values of the given field type.
*/
+ protected Analyzer getQueryAnalyzer(FieldType fieldType) {
+ return fieldType.getQueryAnalyzer();
+ }
+
/**
* Analyzes the given text using the given analyzer and returns the produced
tokens.
*
diff --git
a/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
b/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
index 5ea02e4cfb9..e73c83792f8 100644
---
a/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
+++
b/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
@@ -214,7 +214,7 @@ public class DocumentAnalysisRequestHandler extends
AnalysisRequestHandlerBase {
try {
termsToMatch =
(queryValue != null && request.isShowMatch())
- ? getQueryTokenSet(queryValue, fieldType.getQueryAnalyzer())
+ ? getQueryTokenSet(queryValue, getQueryAnalyzer(fieldType))
: EMPTY_BYTES_SET;
} catch (Exception e) {
// ignore analysis exceptions since we are applying arbitrary text
to all fields
@@ -224,14 +224,14 @@ public class DocumentAnalysisRequestHandler extends
AnalysisRequestHandlerBase {
if (request.getQuery() != null) {
try {
AnalysisContext analysisContext =
- new AnalysisContext(fieldType, fieldType.getQueryAnalyzer(),
EMPTY_BYTES_SET);
+ new AnalysisContext(fieldType, getQueryAnalyzer(fieldType),
EMPTY_BYTES_SET);
fieldTokens.add("query", analyzeValue(request.getQuery(),
analysisContext));
} catch (Exception e) {
// ignore analysis exceptions since we are applying arbitrary text
to all fields
}
}
- Analyzer analyzer = fieldType.getIndexAnalyzer();
+ Analyzer analyzer = getIndexAnalyzer(fieldType);
AnalysisContext analysisContext = new AnalysisContext(fieldType,
analyzer, termsToMatch);
Collection<Object> fieldValues = document.getFieldValues(name);
NamedList<NamedList<? extends Object>> indexTokens = new
SimpleOrderedMap<>();
diff --git
a/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
b/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
index e03c982580a..85cc1a24d3b 100644
---
a/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
+++
b/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
@@ -211,27 +211,26 @@ public class FieldAnalysisRequestHandler extends
AnalysisRequestHandlerBase {
* @return NamedList containing the tokens produced by the analyzers of the
given field, separated
* into an index and a query group
*/
- // package access for testing
@SuppressWarnings({"rawtypes"})
- NamedList<NamedList> analyzeValues(
+ protected NamedList<NamedList> analyzeValues(
FieldAnalysisRequest analysisRequest, FieldType fieldType, String
fieldName) {
final String queryValue = analysisRequest.getQuery();
final Set<BytesRef> termsToMatch =
(queryValue != null && analysisRequest.isShowMatch())
- ? getQueryTokenSet(queryValue, fieldType.getQueryAnalyzer())
+ ? getQueryTokenSet(queryValue, getQueryAnalyzer(fieldType))
: EMPTY_BYTES_SET;
NamedList<NamedList> analyzeResults = new SimpleOrderedMap<>();
if (analysisRequest.getFieldValue() != null) {
AnalysisContext context =
- new AnalysisContext(fieldName, fieldType,
fieldType.getIndexAnalyzer(), termsToMatch);
+ new AnalysisContext(fieldName, fieldType,
getIndexAnalyzer(fieldType), termsToMatch);
NamedList analyzedTokens = analyzeValue(analysisRequest.getFieldValue(),
context);
analyzeResults.add("index", analyzedTokens);
}
if (analysisRequest.getQuery() != null) {
AnalysisContext context =
- new AnalysisContext(fieldName, fieldType,
fieldType.getQueryAnalyzer());
+ new AnalysisContext(fieldName, fieldType,
getQueryAnalyzer(fieldType));
NamedList analyzedTokens = analyzeValue(analysisRequest.getQuery(),
context);
analyzeResults.add("query", analyzedTokens);
}