You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kr...@apache.org on 2016/10/20 19:31:54 UTC

[45/50] [abbrv] lucene-solr:jira/solr-8593: SOLR-8370: Display configured Similarity in Schema-Browser

SOLR-8370: Display configured Similarity in Schema-Browser


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/14b6d93d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/14b6d93d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/14b6d93d

Branch: refs/heads/jira/solr-8593
Commit: 14b6d93db4b0a608809782d1ef01fa97840b80e0
Parents: 39db548
Author: Jan H�ydahl <ja...@apache.org>
Authored: Thu Oct 20 13:25:40 2016 +0200
Committer: Jan H�ydahl <ja...@apache.org>
Committed: Thu Oct 20 13:25:40 2016 +0200

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 +
 .../solr/handler/admin/LukeRequestHandler.java  |  1 +
 .../similarities/SchemaSimilarityFactory.java   | 39 ++++++++-----
 solr/webapp/web/css/angular/schema.css          | 23 ++++++++
 .../webapp/web/js/angular/controllers/schema.js | 60 +++++++++++++-------
 solr/webapp/web/partials/schema.html            | 15 +++--
 6 files changed, 101 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/14b6d93d/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index aca7601..b3a2a30 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -142,6 +142,9 @@ New Features
 
 * SOLR-9417: Allow daemons to terminate when they finish iterating a topic (Joel Bernstein)
 
+* SOLR-8370: Display configured Similarity in Schema-Browser, both global/default and per-field/field-type 
+  (janhoy, Alexandre Rafalovitch)
+
 Bug Fixes
 ----------------------
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/14b6d93d/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
index a5fc36c..d0dd152 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
@@ -474,6 +474,7 @@ public class LukeRequestHandler extends RequestHandlerBase
     finfo.add("uniqueKeyField",
         null == uniqueField ? null : uniqueField.getName());
     finfo.add("defaultSearchField", schema.getDefaultSearchFieldName());
+    finfo.add("similarity", getSimilarityInfo(schema.getSimilarity()));
     finfo.add("types", types);
     return finfo;
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/14b6d93d/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java b/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
index e648481..a71de18 100644
--- a/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
+++ b/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
@@ -129,21 +129,32 @@ public class SchemaSimilarityFactory extends SimilarityFactory implements SolrCo
                                   "' but that <fieldType> does not define a <similarity>");
         }
       }
-      assert null != defaultSim;
-      final Similarity defaultSimilarity = defaultSim;
-      similarity = new PerFieldSimilarityWrapper() {
-        @Override
-        public Similarity get(String name) {
-          FieldType fieldType = core.getLatestSchema().getFieldTypeNoEx(name);
-          if (fieldType == null) {
-            return defaultSimilarity;
-          } else {
-            Similarity similarity = fieldType.getSimilarity();
-            return similarity == null ? defaultSimilarity : similarity;
-          }
-        }
-      };
+      similarity = new SchemaSimilarity(defaultSim);
     }
     return similarity;
   }
+  
+  private class SchemaSimilarity extends PerFieldSimilarityWrapper {
+    private Similarity defaultSimilarity;
+
+    public SchemaSimilarity(Similarity defaultSimilarity) {
+      this.defaultSimilarity = defaultSimilarity;
+    }
+
+    @Override
+    public Similarity get(String name) {
+      FieldType fieldType = core.getLatestSchema().getFieldTypeNoEx(name);
+      if (fieldType == null) {
+        return defaultSimilarity;
+      } else {
+        Similarity similarity = fieldType.getSimilarity();
+        return similarity == null ? defaultSimilarity : similarity;
+      }
+    }
+
+    @Override
+    public String toString() {
+      return "SchemaSimilarity. Default: " + ((get("") == null) ? "null" : get("").toString());
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/14b6d93d/solr/webapp/web/css/angular/schema.css
----------------------------------------------------------------------
diff --git a/solr/webapp/web/css/angular/schema.css b/solr/webapp/web/css/angular/schema.css
index 626cdc2..98a857f 100644
--- a/solr/webapp/web/css/angular/schema.css
+++ b/solr/webapp/web/css/angular/schema.css
@@ -701,4 +701,27 @@ limitations under the License.
 #content #schema .copyfield .updatable a {
   float:left;
   width:80%;
+}
+
+#content #schema dd.similarity.ng-binding::after {
+  content: attr(data-tip) ;
+
+  font-size: 12px;
+  position: relative;
+  white-space: nowrap;
+  bottom: 9999px;
+  left: 0;
+  background: lightyellow;
+  color: black;
+  padding: 4px 7px;
+  line-height: 24px;
+  height: 24px;
+  border: 1px solid darkgray;
+  opacity: 0;
+  transition:opacity 0.4s ease-out;
+}
+
+#content #schema dd.similarity.ng-binding:hover::after {
+  opacity: 90;
+  bottom: -20px;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/14b6d93d/solr/webapp/web/js/angular/controllers/schema.js
----------------------------------------------------------------------
diff --git a/solr/webapp/web/js/angular/controllers/schema.js b/solr/webapp/web/js/angular/controllers/schema.js
index ee23bd7..94dd93e 100644
--- a/solr/webapp/web/js/angular/controllers/schema.js
+++ b/solr/webapp/web/js/angular/controllers/schema.js
@@ -70,6 +70,10 @@ solrAdminApp.controller('SchemaController',
                     $scope.core = $routeParams.core;
                     $scope.defaultSearchField = data.default_search_field;
                     $scope.uniqueKeyField = data.unique_key_field;
+                    $scope.similarity = data.similarity; 
+                    if ($scope.similarity && $scope.similarity.className) {
+                        $scope.similarity.className = shortenPackages($scope.similarity.className); 
+                    }
                     $scope.isDefaultSearchField = ($scope.selectedType == "Field" && $scope.name == $scope.defaultSearchField);
                     $scope.isUniqueKeyField = ($scope.selectedType == "Field" && $scope.name == $scope.uniqueKeyField);
 
@@ -334,6 +338,7 @@ var mergeIndexAndSchemaData = function(index, schema) {
     var data = {
         default_search_field: null,
         unique_key_field: null,
+        similarity: null,
         key: {},
         fields: {},
         dynamic_fields: {},
@@ -354,6 +359,7 @@ var mergeIndexAndSchemaData = function(index, schema) {
 
     data.default_search_field = schema.defaultSearchField;
     data.unique_key_field = schema.uniqueKeyField;
+    data.similarity = schema.similarity;
 
     data.dynamic_fields = schema.dynamicFields;
     data.types = schema.types;
@@ -422,11 +428,11 @@ var mergeIndexAndSchemaData = function(index, schema) {
     return data;
 };
 
-var getFieldProperties = function(data, core, is, field) {
+var getFieldProperties = function(data, core, is, name) {
 
     var display = {};
 
-    display.partialState = is.field && !!data.fields[field].partial;
+    display.partialState = is.field && !!data.fields[name].partial;
 
     display.columns = [];
     display.rows = [];
@@ -446,23 +452,33 @@ var getFieldProperties = function(data, core, is, field) {
     }
 
     // Identify the rows for our field property table
-    if (is.field && data.fields[field]) {
-        if (data.fields[field].flags) {
-            addRow('Properties', data.fields[field].flags);
-        }
-        if (data.fields[field].schema) {
-            addRow('Schema', data.fields[field].schema);
-        }
-        if (data.fields[field].index) {
-            addRow('Index', data.fields[field].index);
-        }
-        display.docs = data.fields[field].docs;
-        display.docsUrl = "#/" + core + "/query?q=" + field + ":[* TO *]";
-        display.distinct = data.fields[field].distinct;
-        display.positionIncrementGap = data.fields[field].positionIncrementGap;
-        display.similarity = data.fields[field].similarity;
-    } else if (is.dynamicField && data.dynamic_fields[field] && data.dynamic_fields[field].flags) {
-        addRow('Properties', data.dynamic_fields[field].flags);
+    if (is.field && data.fields[name]) {
+        if (data.fields[name].flags) {
+            addRow('Properties', data.fields[name].flags);
+        }
+        if (data.fields[name].schema) {
+            addRow('Schema', data.fields[name].schema);
+        }
+        if (data.fields[name].index) {
+            addRow('Index', data.fields[name].index);
+        }
+        display.docs = data.fields[name].docs;
+        display.docsUrl = "#/" + core + "/query?q=" + name + ":[* TO *]";
+        display.distinct = data.fields[name].distinct;
+        display.positionIncrementGap = data.fields[name].positionIncrementGap;
+        if (data.types[data.fields[name].type]) {
+          display.similarity = data.types[data.fields[name].type].similarity;
+        } else {
+          display.similarity = null;
+        }
+    } else if (is.dynamicField && data.dynamic_fields[name] && data.dynamic_fields[name].flags) {
+        addRow('Properties', data.dynamic_fields[name].flags);
+        display.similarity = data.types[data.dynamic_fields[name].type].similarity;
+    } else if (is.type && data.types[name]) {
+        display.similarity = data.types[name].similarity;
+    }
+    if (display.similarity && display.similarity.className) {
+        display.similarity.className = shortenPackages(display.similarity.className);
     }
 
     // identify columns in field property table:
@@ -591,7 +607,11 @@ var sortedObjectArray = function(list) {
       objarr.push({"name": list[i]});
     }
     return objarr;
-}
+};
+
+var shortenPackages = function(className) {
+    return className.replace("org.apache.solr", "o.a.s").replace("org.apache.lucene", "o.a.l");
+};
 
 /*
         var get_width = function get_width()

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/14b6d93d/solr/webapp/web/partials/schema.html
----------------------------------------------------------------------
diff --git a/solr/webapp/web/partials/schema.html b/solr/webapp/web/partials/schema.html
index ca626fd..1c0347f 100644
--- a/solr/webapp/web/partials/schema.html
+++ b/solr/webapp/web/partials/schema.html
@@ -212,7 +212,7 @@ limitations under the License.
             </h2>
           </div>
 
-          <div class="partial" ng-show="partialState">
+          <div class="partial" ng-show="display.partialState">
 
             <p>Because your Index is empty, we do not have enough Information about this Field</p>
 
@@ -220,11 +220,11 @@ limitations under the License.
 
           <dl class="options clearfix">
 
-            <dt class="field-type">Field-Type:</dt>
-            <dd class="field-type">{{analysis.data.className}}</dd>
+            <dt class="field-type" ng-show="analysis.data.className">Field-Type:</dt>
+            <dd class="field-type" ng-show="analysis.data.className">{{analysis.data.className}}</dd>
 
-            <dt class="similarity" ng-show="display.similarity">Similarity:</dt>
-            <dd class="similarity" ng-show="display.similarity">{{ display.similarity.details }} ({{ similarity.className }}) </dd>
+            <dt class="similarity" ng-show="display.similarity.className">Similarity:</dt>
+            <dd class="similarity" ng-show="display.similarity.className" data-tip="{{ display.similarity.className }}">{{ display.similarity.details }}</dd>
 
             <dt class="position-increment-gap" ng-show="display.positionIncrementGap"><abbr title="Position Increment Gap">PI Gap</abbr>:</dt>
             <dd class="position-increment-gap" ng-show="display.positionIncrementGap">{{ display.positionIncrementGap }}</dd>
@@ -287,7 +287,7 @@ limitations under the License.
 
         </div>
 
-        <div class="terminfo-holder loaded clearfix" ng-class="{disabled: noTermData}" ng-show="is.field">
+        <div class="terminfo-holder loaded clearfix" ng-class="{disabled: noTermData}" ng-show="is.field && !display.partialState">
 
           <div class="trigger">
 
@@ -438,6 +438,9 @@ limitations under the License.
         <dt class="default-search-field" ng-class="{active: isDefaultSearchField}" ng-show="defaultSearchField">Default Search Field</dt>
         <dd class="default-search-field" ng-class="{active: isDefaultSearchField}"><a ng-href="#/{{core}}/schema?field={{defaultSearchField}}">{{defaultSearchField}}</a></dd>
 
+        <dt class="similarity" ng-class="{active: similarity.className}">Global Similarity:</dt>
+        <dd class="similarity" ng-class="{active: similarity.className}" data-tip="{{ similarity.className }}">{{ similarity.details }}</dd>
+
       </dl>
 
     </div>