You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ep...@apache.org on 2026/05/18 17:00:29 UTC
(solr) branch branch_10x updated: SOLR-18246: Support multiple facet.field parameters in Admin UI query screen (#4441)
This is an automated email from the ASF dual-hosted git repository.
epugh pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_10x by this push:
new d4671bde197 SOLR-18246: Support multiple facet.field parameters in Admin UI query screen (#4441)
d4671bde197 is described below
commit d4671bde197803174531799fcc745707afa73f09
Author: Umut Saribiyik <10...@users.noreply.github.com>
AuthorDate: Mon May 18 18:59:58 2026 +0200
SOLR-18246: Support multiple facet.field parameters in Admin UI query screen (#4441)
Co-authored-by: Eric Pugh <ep...@opensourceconnections.com>
---
changelog/unreleased/SOLR-18246.yml | 7 ++++++
solr/webapp/web/js/angular/controllers/query.js | 31 +++++++++++++++++++++++++
solr/webapp/web/partials/query.html | 10 +++++++-
3 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/changelog/unreleased/SOLR-18246.yml b/changelog/unreleased/SOLR-18246.yml
new file mode 100644
index 00000000000..95c55340646
--- /dev/null
+++ b/changelog/unreleased/SOLR-18246.yml
@@ -0,0 +1,7 @@
+title: Solr Admin UI properly supports multiple facet.field parameters
+type: fixed
+authors:
+ - name: Umut Saribiyik
+links:
+ - name: SOLR-18246
+ url: https://issues.apache.org/jira/browse/SOLR-18246
diff --git a/solr/webapp/web/js/angular/controllers/query.js b/solr/webapp/web/js/angular/controllers/query.js
index 9ddda0511b4..33294b81097 100644
--- a/solr/webapp/web/js/angular/controllers/query.js
+++ b/solr/webapp/web/js/angular/controllers/query.js
@@ -21,6 +21,7 @@ solrAdminApp.controller('QueryController',
$scope._models = [];
$scope.filters = [{fq:""}];
+ $scope.facetFields = [{value:""}];
$scope.rawParams = [{rawParam:""}];
$scope.val = {};
$scope.val['q'] = "*:*";
@@ -72,6 +73,8 @@ solrAdminApp.controller('QueryController',
// filters and rawParams are handled specially because of possible multiple values
if( p === "fq" ) {
addFilters(urlParams[p]);
+ } else if( p === "facet.field" ) {
+ addFacetFields(urlParams[p]);
} else {
setParam(p, urlParams[p]);
}
@@ -128,6 +131,18 @@ solrAdminApp.controller('QueryController',
}
}
}
+ function addFacetFields(argObject){
+ if( argObject ){
+ $scope.facetFields = [];
+ if( Array.isArray(argObject) ){
+ for( var i = 0, iLen = argObject.length; i<iLen; i++ ){
+ $scope.facetFields.push({value: argObject[i]});
+ }
+ } else {
+ $scope.facetFields.push({value: argObject});
+ }
+ }
+ }
$scope.doQuery = function(isPageReload) {
var params = {};
@@ -189,6 +204,12 @@ solrAdminApp.controller('QueryController',
copy(params, $scope.filters[filter]);
}
+ for (var fi in $scope.facetFields) {
+ if ($scope.facetFields[fi].value) {
+ set("facet.field", $scope.facetFields[fi].value);
+ }
+ }
+
for (var rawIndex in $scope.rawParams) {
if ($scope.rawParams[rawIndex].rawParam) {
var rawParam = $scope.rawParams[rawIndex].rawParam.split(/[&\n]/);
@@ -294,6 +315,16 @@ solrAdminApp.controller('QueryController',
$scope.addFilter = function(index) {
$scope.filters.splice(index+1, 0, {fq:""});
};
+ $scope.removeFacetField = function(index) {
+ if ($scope.facetFields.length === 1) {
+ $scope.facetFields = [{value: ""}];
+ } else {
+ $scope.facetFields.splice(index, 1);
+ }
+ };
+ $scope.addFacetField = function(index) {
+ $scope.facetFields.splice(index+1, 0, {value:""});
+ };
$scope.removeRawParam = function (index) {
if ($scope.rawParams.length === 1) {
$scope.rawParams = [{rawParam: ""}];
diff --git a/solr/webapp/web/partials/query.html b/solr/webapp/web/partials/query.html
index 48e618643a7..ccb9b990e9d 100644
--- a/solr/webapp/web/partials/query.html
+++ b/solr/webapp/web/partials/query.html
@@ -433,7 +433,15 @@ limitations under the License.
<textarea ng-model="val['facet.query']" name="facet.query" id="facet_query"></textarea>
<label for="facet_field">facet.field</label>
- <input type="text" ng-model="val['facet.field']" name="facet.field" id="facet_field">
+ <div class="multiple" id="facet_field">
+ <div class="row clearfix" ng-repeat="facetField in facetFields">
+ <input type="text" ng-model="facetField.value" name="facet.field" title="Facet field.">
+ <div class="buttons">
+ <a class="rem" ng-click="removeFacetField($index)"><span></span></a>
+ <a class="add" ng-click="addFacetField($index)"><span></span></a>
+ </div>
+ </div>
+ </div>
<label for="facet_prefix">facet.prefix</label>
<input type="text" ng-model="val['facet.prefix']" name="facet.prefix" id="facet_prefix">