This is an automated email from the ASF dual-hosted git repository.

epugh 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 e35347e7cc1 SOLR-16618 Admin UI Analysis page should include dynamic 
fields (#1304)
e35347e7cc1 is described below

commit e35347e7cc12d91af91cb38f9cef43ccc7a7b40e
Author: Alex <[email protected]>
AuthorDate: Fri Feb 3 06:44:35 2023 -0800

    SOLR-16618 Admin UI Analysis page should include dynamic fields (#1304)
    
    * SOLR-16618 Admin UI Analysis page should include dynamic fields
    
    Co-authored-by: Eric Pugh <[email protected]>
---
 solr/CHANGES.txt                                   |  2 +
 solr/webapp/web/js/angular/controllers/analysis.js | 83 +++++++++++++++++-----
 solr/webapp/web/js/angular/controllers/schema.js   |  2 +-
 3 files changed, 67 insertions(+), 20 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index ed54c8d1ad1..f44035e0614 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -132,6 +132,8 @@ Improvements
   properties `pkiHandlerPublicKeyPath` and `pkiHandlerPrivateKeyPath` before 
starting MiniSolrCloudCluster when using
   the Solr test framework. (Tomás Fernández Löbbe)
 
+* SOLR-16618: Admin UI Analysis page should include dynamic fields (Alex 
Deparvu via Eric Pugh)
+
 Optimizations
 ---------------------
 
diff --git a/solr/webapp/web/js/angular/controllers/analysis.js 
b/solr/webapp/web/js/angular/controllers/analysis.js
index 5fff59caa65..eb99830de2e 100644
--- a/solr/webapp/web/js/angular/controllers/analysis.js
+++ b/solr/webapp/web/js/angular/controllers/analysis.js
@@ -21,33 +21,64 @@ solrAdminApp.controller('AnalysisController',
 
       $scope.refresh = function() {
         Luke.schema({core: $routeParams.core}, function(data) {
-          $scope.fieldsAndTypes = [];
-          for (var field in data.schema.fields) {
-            $scope.fieldsAndTypes.push({
-              group: "Fields",
-              value: "fieldname=" + field,
-              label: field});
-          }
-          for (var type in data.schema.types) {
-            $scope.fieldsAndTypes.push({
-              group: "Types",
-              value: "fieldtype=" + type,
-              label: type});
-          }
+          $scope.fieldsAndTypes = getFieldsAndTypes(data.schema);
           $scope.core = $routeParams.core;
+          $scope.parseQueryString(data.schema);
+          // @todo - set defaultSearchField either to 
context["analysis.fieldname"] or context["analysis.fieldtype"]
         });
+      };
+      $scope.verbose = true;
 
-        $scope.parseQueryString();
-        // @todo - set defaultSearchField either to 
context["analysis.fieldname"] or context["analysis.fieldtype"]
+      var getFieldsAndTypes = function(schema) {
+        var aggregatedFields = schema.fields;
+        for (var field in schema.fields) {
+          var copyDests = schema.fields[field].copyDests;
+          for (var i in copyDests) {
+            var copyDest = copyDests[i];
+            if (!aggregatedFields[copyDest]) {
+              aggregatedFields[copyDest] = {};
+            }
+          }
+        }
 
+        var fieldsAndTypes = [];
+        var fields = Object.keys(aggregatedFields).sort();
+        for (var i in fields) {
+          fieldsAndTypes.push({
+            group: "Fields",
+            value: "fieldname=" + fields[i],
+            label: fields[i]
+          });
+        }
+        var dynamicFields = Object.keys(schema.dynamicFields).sort();
+        for (var i in dynamicFields) {
+          fieldsAndTypes.push({
+            group: "Dynamic Fields",
+            value: "dynamicfield=" + dynamicFields[i],
+            label: dynamicFields[i]
+          });
+        }
+        var types = Object.keys(schema.types).sort();
+        for (var i in types) {
+          fieldsAndTypes.push({
+            group: "Types",
+            value: "fieldtype=" + types[i],
+            label: types[i]
+          });
+        }
+        return fieldsAndTypes;
       };
-      $scope.verbose = true;
 
       var getShortComponentName = function(longname) {
         var short = -1 !== longname.indexOf( '$' )
                          ? longname.split( '$' )[1]
                          : longname.split( '.' ).pop();
-        return short.match( /[A-Z]/g ).join( '' );
+        var match = short.match( /[A-Z]/g );
+          if(match != undefined) {
+            return match.join( '' );
+          } else {
+            return "?";
+          }
       };
 
       var getCaptionsForComponent = function(data) {
@@ -138,15 +169,23 @@ solrAdminApp.controller('AnalysisController',
 
         if (fieldOrType == "fieldname") {
           $location.search("analysis.fieldname", name);
+          $location.search("analysis.dynamicfield", null);
           $location.search("analysis.fieldtype", null);
+
+        } else if (fieldOrType == "dynamicfield") {
+          $location.search("analysis.fieldname", null);
+          $location.search("analysis.dynamicfield", name);
+          $location.search("analysis.fieldtype", null);
+
         } else {
-          $location.search("analysis.fieldtype", name);
           $location.search("analysis.fieldname", null);
+          $location.search("analysis.dynamicfield", null);
+          $location.search("analysis.fieldtype", name);
         }
         $location.search("verbose_output", $scope.verbose ? "1" : "0");
       };
 
-      $scope.parseQueryString = function () {
+      $scope.parseQueryString = function (schema) {
           var params = {};
           var search = $location.search();
 
@@ -161,6 +200,10 @@ solrAdminApp.controller('AnalysisController',
           if (search["analysis.fieldname"]) {
               $scope.fieldOrType = "fieldname=" + search["analysis.fieldname"];
               $scope.schemaBrowserUrl = "field=" + 
search["analysis.fieldname"];
+          } else if (search["analysis.dynamicfield"]) {
+              params["analysis.fieldtype"] = 
schema.dynamicFields[search["analysis.dynamicfield"]].type;
+              $scope.fieldOrType = "dynamicfield=" + 
search["analysis.dynamicfield"];
+              $scope.schemaBrowserUrl = "dynamic-field=" + 
search["analysis.dynamicfield"];
           } else {
               $scope.fieldOrType = "fieldtype=" + search["analysis.fieldtype"];
               $scope.schemaBrowserUrl = "type=" + search["analysis.fieldtype"];
@@ -186,6 +229,8 @@ solrAdminApp.controller('AnalysisController',
         var parts = $scope.fieldOrType.split("=");
         if (parts[0]=='fieldname') {
           $scope.schemaBrowserUrl = "field=" + parts[1];
+        } else if (parts[0]=='dynamicfield') {
+          $scope.schemaBrowserUrl = "dynamic-field=" + parts[1];
         } else {
           $scope.schemaBrowserUrl = "type=" + parts[1];
         }
diff --git a/solr/webapp/web/js/angular/controllers/schema.js 
b/solr/webapp/web/js/angular/controllers/schema.js
index 3ff0b0e079f..ba4bc6ef140 100644
--- a/solr/webapp/web/js/angular/controllers/schema.js
+++ b/solr/webapp/web/js/angular/controllers/schema.js
@@ -562,7 +562,7 @@ var getAnalysisInfo = function(data, is, name) {
     }
     else if (is.dynamicField) {
         var type = data.relations.df_t[name];
-        analysis.query = "analysis.fieldtype=" + type;
+        analysis.query = "analysis.dynamicfield=" + name;
     }
     else if (is.type) {
         var type = name;

Reply via email to