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 <[email protected]>
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 <[email protected]>
---
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">