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);
     }

Reply via email to