| /* |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| solrAdminApp.controller('QueryController', |
| function($scope, $routeParams, $location, Query, Constants){ |
| $scope.resetMenu("query", Constants.IS_COLLECTION_PAGE); |
| |
| // @todo read URL parameters into scope |
| $scope.query = {wt: 'json', q:'*:*', indent:'on'}; |
| $scope.filters = [{fq:""}]; |
| $scope.dismax = {defType: "dismax"}; |
| $scope.edismax = {defType: "edismax", stopwords: true, lowercaseOperators: true}; |
| $scope.hl = {hl:"on"}; |
| $scope.facet = {facet: "on"}; |
| $scope.spatial = {}; |
| $scope.spellcheck = {spellcheck:"on"}; |
| $scope.qt = "/select"; |
| |
| $scope.doQuery = function() { |
| var params = {}; |
| |
| var set = function(key, value) { |
| if (params[key]) { |
| params[key].push(value); |
| } else { |
| params[key] = [value]; |
| } |
| } |
| var copy = function(params, query) { |
| for (var key in query) { |
| terms = query[key]; |
| if (terms.length > 0 && key[0]!="$") { |
| set(key, terms); |
| } |
| } |
| }; |
| |
| copy(params, $scope.query); |
| |
| if ($scope.isDismax) copy(params, $scope.dismax); |
| if ($scope.isEdismax) copy(params, $scope.edismax); |
| if ($scope.isHighlight) copy(params, $scope.hl); |
| if ($scope.isFacet) copy(params, $scope.facet); |
| if ($scope.isSpatial) copy(params, $scope.spatial); |
| if ($scope.isSpellcheck) copy(params, $scope.spellcheck); |
| |
| if ($scope.rawParams) { |
| var rawParams = $scope.rawParams.split(/[&\n]/); |
| for (var i in rawParams) { |
| var param = rawParams[i]; |
| var equalPos = param.indexOf("="); |
| if (equalPos > -1) { |
| set(param.substring(0, equalPos), param.substring(equalPos+1)); |
| } else { |
| set(param, ""); // Use empty value for params without "=" |
| } |
| } |
| } |
| |
| var qt = $scope.qt ? $scope.qt : "/select"; |
| |
| for (var filter in $scope.filters) { |
| copy(params, $scope.filters[filter]); |
| } |
| |
| params.core = $routeParams.core; |
| if (qt[0] == '/') { |
| params.handler = qt.substring(1); |
| } else { // Support legacy style handleSelect=true configs |
| params.handler = "select"; |
| set("qt", qt); |
| } |
| var url = Query.url(params); |
| Query.query(params, function(data) { |
| $scope.lang = $scope.query.wt; |
| $scope.response = data; |
| $scope.url = $location.protocol() + "://" + |
| $location.host() + ":" + |
| $location.port() + url; |
| }); |
| }; |
| |
| if ($location.search().q) { |
| $scope.query.q = $location.search()["q"]; |
| $scope.doQuery(); |
| } |
| |
| $scope.removeFilter = function(index) { |
| if ($scope.filters.length === 1) { |
| $scope.filters = [{fq: ""}]; |
| } else { |
| $scope.filters.splice(index, 1); |
| } |
| }; |
| |
| $scope.addFilter = function(index) { |
| $scope.filters.splice(index+1, 0, {fq:""}); |
| }; |
| } |
| ); |