You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2015/09/29 16:43:04 UTC
svn commit: r1705870 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/core/
solr/core/src/java/org/apache/solr/handler/admin/
solr/core/src/java/org/apache/solr/handler/component/
solr/core/src/java/org/apache...
Author: noble
Date: Tue Sep 29 14:43:03 2015
New Revision: 1705870
URL: http://svn.apache.org/viewvc?rev=1705870&view=rev
Log:
SOLR-8104: Config API does not work for spellchecker
Added:
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
- copied, changed from r1705662, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
Removed:
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/JSONResponseWriter.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
lucene/dev/branches/branch_5x/solr/solrj/ (props changed)
lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/CommonParams.java
lucene/dev/branches/branch_5x/solr/webapp/ (props changed)
lucene/dev/branches/branch_5x/solr/webapp/web/WEB-INF/web.xml
lucene/dev/branches/branch_5x/solr/webapp/web/js/angular/services.js
lucene/dev/branches/branch_5x/solr/webapp/web/js/scripts/cloud.js
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Tue Sep 29 14:43:03 2015
@@ -118,6 +118,9 @@ Bug Fixes
* SOLR-8077: Replication can still cause index corruption. (Mark Miller)
+* SOLR-8104: Config API does not work for spellchecker (noble)
+
+
Optimizations
----------------------
@@ -188,6 +191,8 @@ Other Changes
* SOLR-8068: Throw a SolrException if the core container has initialization errors or is
shutting down (Ishan Chattopadhyaya, Noble Paul, Anshum Gupta)
+* SOLR-8083: Convert the ZookeeperInfoServlet to a handler at /admin/zookeeper (noble)
+
================== 5.3.1 ==================
Bug Fixes
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Tue Sep 29 14:43:03 2015
@@ -49,6 +49,7 @@ import org.apache.solr.handler.admin.Con
import org.apache.solr.handler.admin.CoreAdminHandler;
import org.apache.solr.handler.admin.InfoHandler;
import org.apache.solr.handler.admin.SecurityConfHandler;
+import org.apache.solr.handler.admin.ZookeeperInfoHandler;
import org.apache.solr.handler.component.HttpShardHandlerFactory;
import org.apache.solr.handler.component.ShardHandlerFactory;
import org.apache.solr.logging.LogWatcher;
@@ -398,6 +399,7 @@ public class CoreContainer {
initializeAuthorizationPlugin((Map<String, Object>) securityConfig.data.get("authorization"));
initializeAuthenticationPlugin((Map<String, Object>) securityConfig.data.get("authentication"));
+ containerHandlers.put(ZK_PATH, new ZookeeperInfoHandler(this));
securityConfHandler = new SecurityConfHandler(this);
collectionsHandler = createHandler(cfg.getCollectionsHandlerClass(), CollectionsHandler.class);
containerHandlers.put(COLLECTIONS_HANDLER_PATH, collectionsHandler);
Copied: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java (from r1705662, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java?p2=lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java&p1=lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java&r1=1705662&r2=1705870&rev=1705870&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java Tue Sep 29 14:43:03 2015
@@ -46,13 +46,11 @@ import org.apache.solr.common.cloud.OnRe
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkStateReader;
-import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
-import org.apache.solr.handler.ReplicationHandler;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.JSONResponseWriter;
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java Tue Sep 29 14:43:03 2015
@@ -79,7 +79,7 @@ import org.slf4j.LoggerFactory;
* <p>
* Refer to http://wiki.apache.org/solr/SpellCheckComponent for more details
* </p>
- *
+ *
* @since solr 1.3
*/
public class SpellCheckComponent extends SearchComponent implements SolrCoreAware, SpellingParams {
@@ -95,7 +95,7 @@ public class SpellCheckComponent extends
@SuppressWarnings("unchecked")
protected NamedList initParams;
-
+
/**
* Key is the dictionary, value is the SpellChecker for that dictionary name
@@ -140,7 +140,7 @@ public class SpellCheckComponent extends
String q = params.get(SPELLCHECK_Q);
SolrSpellChecker spellChecker = getSpellChecker(params);
Collection<Token> tokens = null;
-
+
if (q != null) {
//we have a spell check param, tokenize it with the query analyzer applicable for this spellchecker
tokens = getTokens(q, spellChecker.getQueryAnalyzer());
@@ -155,16 +155,16 @@ public class SpellCheckComponent extends
if (spellChecker != null) {
int count = params.getInt(SPELLCHECK_COUNT, 1);
boolean onlyMorePopular = params.getBool(SPELLCHECK_ONLY_MORE_POPULAR, DEFAULT_ONLY_MORE_POPULAR);
- boolean extendedResults = params.getBool(SPELLCHECK_EXTENDED_RESULTS, false);
+ boolean extendedResults = params.getBool(SPELLCHECK_EXTENDED_RESULTS, false);
boolean collate = params.getBool(SPELLCHECK_COLLATE, false);
float accuracy = params.getFloat(SPELLCHECK_ACCURACY, Float.MIN_VALUE);
- int alternativeTermCount = params.getInt(SpellingParams.SPELLCHECK_ALTERNATIVE_TERM_COUNT, 0);
+ int alternativeTermCount = params.getInt(SpellingParams.SPELLCHECK_ALTERNATIVE_TERM_COUNT, 0);
Integer maxResultsForSuggest = params.getInt(SpellingParams.SPELLCHECK_MAX_RESULTS_FOR_SUGGEST);
ModifiableSolrParams customParams = new ModifiableSolrParams();
for (String checkerName : getDictionaryNames(params)) {
customParams.add(getCustomParams(checkerName, params));
}
-
+
Integer hitsInteger = (Integer) rb.rsp.getToLog().get("hits");
long hits = 0;
if (hitsInteger == null) {
@@ -180,7 +180,7 @@ public class SpellCheckComponent extends
} else if (alternativeTermCount > 0) {
suggestMode = SuggestMode.SUGGEST_ALWAYS;
}
-
+
IndexReader reader = rb.req.getSearcher().getIndexReader();
SpellingOptions options = new SpellingOptions(tokens, reader, count,
alternativeTermCount, suggestMode, extendedResults, accuracy,
@@ -190,21 +190,21 @@ public class SpellCheckComponent extends
spellingResult = new SpellingResult();
}
boolean isCorrectlySpelled = hits > (maxResultsForSuggest==null ? 0 : maxResultsForSuggest);
-
- NamedList response = new SimpleOrderedMap();
+
+ NamedList response = new SimpleOrderedMap();
NamedList suggestions = toNamedList(shardRequest, spellingResult, q, extendedResults);
response.add("suggestions", suggestions);
-
+
if (extendedResults) {
response.add("correctlySpelled", isCorrectlySpelled);
- }
+ }
if (collate) {
addCollationsToResponse(params, spellingResult, rb, q, response, spellChecker.isSuggestionsMayOverlap());
}
if (shardRequest) {
addOriginalTermsToResponse(response, tokens);
}
-
+
rb.rsp.add("spellcheck", response);
} else {
@@ -213,7 +213,7 @@ public class SpellCheckComponent extends
}
}
}
-
+
@SuppressWarnings("unchecked")
protected void addCollationsToResponse(SolrParams params, SpellingResult spellingResult, ResponseBuilder rb, String q,
NamedList response, boolean suggestionsMayOverlap) {
@@ -261,7 +261,7 @@ public class SpellCheckComponent extends
}
response.add("collations", collationList);
}
-
+
private void addOriginalTermsToResponse(NamedList response, Collection<Token> originalTerms) {
List<String> originalTermStr = new ArrayList<String>();
for(Token t : originalTerms) {
@@ -294,7 +294,7 @@ public class SpellCheckComponent extends
public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) {
SolrParams params = rb.req.getParams();
if (!params.getBool(COMPONENT_NAME, false)) return;
- int purpose = rb.grouping() ? ShardRequest.PURPOSE_GET_TOP_GROUPS : ShardRequest.PURPOSE_GET_TOP_IDS;
+ int purpose = rb.grouping() ? ShardRequest.PURPOSE_GET_TOP_GROUPS : ShardRequest.PURPOSE_GET_TOP_IDS;
if ((sreq.purpose & purpose) != 0) {
// fetch at least 5 suggestions from each shard
int count = sreq.params.getInt(SPELLCHECK_COUNT, 1);
@@ -318,7 +318,7 @@ public class SpellCheckComponent extends
boolean collationExtendedResults = params.getBool(SPELLCHECK_COLLATE_EXTENDED_RESULTS, false);
int maxCollationTries = params.getInt(SPELLCHECK_MAX_COLLATION_TRIES, 0);
int maxCollations = params.getInt(SPELLCHECK_MAX_COLLATIONS, 1);
- Integer maxResultsForSuggest = params.getInt(SpellingParams.SPELLCHECK_MAX_RESULTS_FOR_SUGGEST);
+ Integer maxResultsForSuggest = params.getInt(SpellingParams.SPELLCHECK_MAX_RESULTS_FOR_SUGGEST);
int count = rb.req.getParams().getInt(SPELLCHECK_COUNT, 1);
int numSug = Math.max(count, AbstractLuceneSpellChecker.DEFAULT_SUGGESTION_COUNT);
@@ -329,11 +329,11 @@ public class SpellCheckComponent extends
origQuery = params.get(CommonParams.Q);
}
}
-
+
long hits = rb.grouping() ? rb.totalHitCount : rb.getNumberDocumentsFound();
boolean isCorrectlySpelled = hits > (maxResultsForSuggest==null ? 0 : maxResultsForSuggest);
-
- SpellCheckMergeData mergeData = new SpellCheckMergeData();
+
+ SpellCheckMergeData mergeData = new SpellCheckMergeData();
if (maxResultsForSuggest==null || !isCorrectlySpelled) {
for (ShardRequest sreq : rb.finished) {
for (ShardResponse srsp : sreq.responses) {
@@ -359,23 +359,23 @@ public class SpellCheckComponent extends
// all shard responses have been collected
// create token and get top suggestions
- SolrSpellChecker checker = getSpellChecker(rb.req.getParams());
+ SolrSpellChecker checker = getSpellChecker(rb.req.getParams());
SpellingResult result = checker.mergeSuggestions(mergeData, numSug, count, extendedResults);
-
+
NamedList response = new SimpleOrderedMap();
-
+
NamedList suggestions = toNamedList(false, result, origQuery, extendedResults);
response.add("suggestions", suggestions);
if (extendedResults) {
- response.add("correctlySpelled", isCorrectlySpelled);
+ response.add("correctlySpelled", isCorrectlySpelled);
}
-
+
if (collate) {
SpellCheckCollation[] sortedCollations = mergeData.collations.values()
.toArray(new SpellCheckCollation[mergeData.collations.size()]);
Arrays.sort(sortedCollations);
-
+
NamedList collations = new NamedList();
int i = 0;
while (i < maxCollations && i < sortedCollations.length) {
@@ -392,16 +392,16 @@ public class SpellCheckComponent extends
collations.add("collation", collation.getCollationQuery());
}
}
-
+
response.add("collations", collations);
}
-
+
rb.rsp.add("spellcheck", response);
}
-
+
@SuppressWarnings("unchecked")
private void collectShardSuggestions(NamedList nl, SpellCheckMergeData mergeData) {
- SpellCheckResponse spellCheckResp = new SpellCheckResponse(nl);
+ SpellCheckResponse spellCheckResp = new SpellCheckResponse(nl);
Iterable<Object> originalTermStrings = (Iterable<Object>) nl.get("originalTerms");
if(originalTermStrings!=null) {
mergeData.originalTerms = new HashSet<>();
@@ -423,14 +423,14 @@ public class SpellCheckComponent extends
if (o != null) origFreq += o;
origFreq += suggestion.getOriginalFrequency();
mergeData.origVsFreq.put(suggestion.getToken(), origFreq);
-
+
//# shards reporting
Integer origShards = mergeData.origVsShards.get(suggestion.getToken());
if(origShards==null) {
mergeData.origVsShards.put(suggestion.getToken(), 1);
} else {
mergeData.origVsShards.put(suggestion.getToken(), ++origShards);
- }
+ }
// find best suggestions
for (int i = 0; i < suggestion.getNumFound(); i++) {
@@ -451,7 +451,7 @@ public class SpellCheckComponent extends
}
}
}
-
+
@SuppressWarnings("unchecked")
private void collectShardCollations(SpellCheckMergeData mergeData, NamedList spellCheckResponse, int maxCollationTries) {
Map<String, SpellCheckCollation> collations = mergeData.collations;
@@ -480,7 +480,7 @@ public class SpellCheckComponent extends
collations.put(coll.getCollationQuery(), coll);
} else
{
- NamedList expandedCollation = (NamedList) o;
+ NamedList expandedCollation = (NamedList) o;
SpellCheckCollation coll = new SpellCheckCollation();
coll.setCollationQuery((String) expandedCollation.get("collationQuery"));
coll.setHits((Integer) expandedCollation.get("hits"));
@@ -514,7 +514,7 @@ public class SpellCheckComponent extends
FlagsAttribute flagsAtt = ts.addAttribute(FlagsAttribute.class);
PayloadAttribute payloadAtt = ts.addAttribute(PayloadAttribute.class);
PositionIncrementAttribute posIncAtt = ts.addAttribute(PositionIncrementAttribute.class);
-
+
while (ts.incrementToken()){
Token token = new Token();
token.copyBuffer(termAtt.buffer(), 0, termAtt.length());
@@ -547,7 +547,7 @@ public class SpellCheckComponent extends
return ssc;
}
}
-
+
private String getDictionaryNameAsSingleString(String[] dictName) {
StringBuilder sb = new StringBuilder();
for (String dn : dictName) {
@@ -604,7 +604,7 @@ public class SpellCheckComponent extends
suggestionList.add("numFound", theSuggestions.size());
suggestionList.add("startOffset", inputToken.startOffset());
suggestionList.add("endOffset", inputToken.endOffset());
-
+
// Logical structure of normal (non-extended) results:
// "suggestion":["alt1","alt2"]
//
@@ -616,7 +616,7 @@ public class SpellCheckComponent extends
if (extendedResults && hasFreqInfo) {
suggestionList.add("origFreq", spellingResult
.getTokenFrequency(inputToken));
-
+
ArrayList<SimpleOrderedMap> sugs = new ArrayList<>();
suggestionList.add("suggestion", sugs);
for (Map.Entry<String,Integer> suggEntry : theSuggestions.entrySet()) {
@@ -628,7 +628,7 @@ public class SpellCheckComponent extends
} else {
suggestionList.add("suggestion", theSuggestions.keySet());
}
-
+
if (hasFreqInfo) {
Integer tokenFrequency = spellingResult.getTokenFrequency(inputToken);
if (tokenFrequency==null || tokenFrequency == 0) {
@@ -648,45 +648,20 @@ public class SpellCheckComponent extends
boolean hasDefault = false;
for (int i = 0; i < initParams.size(); i++) {
if (initParams.getName(i).equals("spellchecker")) {
- NamedList spellchecker = (NamedList) initParams.getVal(i);
- String className = (String) spellchecker.get("classname");
- // TODO: this is a little bit sneaky: warn if class isnt supplied
- // so that it's mandatory in a future release?
- if (className == null)
- className = IndexBasedSpellChecker.class.getName();
- SolrResourceLoader loader = core.getResourceLoader();
- SolrSpellChecker checker = loader.newInstance(className, SolrSpellChecker.class);
- if (checker != null) {
- String dictionary = checker.init(spellchecker, core);
- if (dictionary != null) {
- boolean isDefault = dictionary.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME);
- if (isDefault == true && hasDefault == false){
- hasDefault = true;
- } else if (isDefault == true && hasDefault == true){
- throw new RuntimeException("More than one dictionary is missing name.");
- }
- spellCheckers.put(dictionary, checker);
- } else {
- if (hasDefault == false){
- spellCheckers.put(SolrSpellChecker.DEFAULT_DICTIONARY_NAME, checker);
- hasDefault = true;
- } else {
- throw new RuntimeException("More than one dictionary is missing name.");
+ Object cfg = initParams.getVal(i);
+ if (cfg instanceof NamedList) {
+ addSpellChecker(core, hasDefault, (NamedList) cfg);
+ } else if (cfg instanceof Map) {
+ addSpellChecker(core, hasDefault, new NamedList((Map) cfg));
+ } else if (cfg instanceof List) {
+ for (Object o : (List) cfg) {
+ if (o instanceof Map) {
+ addSpellChecker(core, hasDefault, new NamedList((Map) o));
}
}
- // Register event listeners for this SpellChecker
- core.registerFirstSearcherListener(new SpellCheckerListener(core, checker, false, false));
- boolean buildOnCommit = Boolean.parseBoolean((String) spellchecker.get("buildOnCommit"));
- boolean buildOnOptimize = Boolean.parseBoolean((String) spellchecker.get("buildOnOptimize"));
- if (buildOnCommit || buildOnOptimize) {
- LOG.info("Registering newSearcher listener for spellchecker: " + checker.getDictionaryName());
- core.registerNewSearcherListener(new SpellCheckerListener(core, checker, buildOnCommit, buildOnOptimize));
- }
- } else {
- throw new RuntimeException("Can't load spell checker: " + className);
}
}
- }
+ }
Map<String, QueryConverter> queryConverters = new HashMap<>();
core.initPlugins(queryConverters,QueryConverter.class);
@@ -711,6 +686,47 @@ public class SpellCheckComponent extends
}
}
+ private boolean addSpellChecker(SolrCore core, boolean hasDefault, NamedList spellchecker) {
+ String className = (String) spellchecker.get("classname");
+ if (className == null) className = (String) spellchecker.get("class");
+ // TODO: this is a little bit sneaky: warn if class isnt supplied
+ // so that it's mandatory in a future release?
+ if (className == null)
+ className = IndexBasedSpellChecker.class.getName();
+ SolrResourceLoader loader = core.getResourceLoader();
+ SolrSpellChecker checker = loader.newInstance(className, SolrSpellChecker.class);
+ if (checker != null) {
+ String dictionary = checker.init(spellchecker, core);
+ if (dictionary != null) {
+ boolean isDefault = dictionary.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME);
+ if (isDefault && !hasDefault) {
+ hasDefault = true;
+ } else if (isDefault && hasDefault) {
+ throw new RuntimeException("More than one dictionary is missing name.");
+ }
+ spellCheckers.put(dictionary, checker);
+ } else {
+ if (!hasDefault) {
+ spellCheckers.put(SolrSpellChecker.DEFAULT_DICTIONARY_NAME, checker);
+ hasDefault = true;
+ } else {
+ throw new RuntimeException("More than one dictionary is missing name.");
+ }
+ }
+ // Register event listeners for this SpellChecker
+ core.registerFirstSearcherListener(new SpellCheckerListener(core, checker, false, false));
+ boolean buildOnCommit = Boolean.parseBoolean((String) spellchecker.get("buildOnCommit"));
+ boolean buildOnOptimize = Boolean.parseBoolean((String) spellchecker.get("buildOnOptimize"));
+ if (buildOnCommit || buildOnOptimize) {
+ LOG.info("Registering newSearcher listener for spellchecker: " + checker.getDictionaryName());
+ core.registerNewSearcherListener(new SpellCheckerListener(core, checker, buildOnCommit, buildOnOptimize));
+ }
+ } else {
+ throw new RuntimeException("Can't load spell checker: " + className);
+ }
+ return hasDefault;
+ }
+
private static class SpellCheckerListener implements SolrEventListener {
private final SolrCore core;
private final SolrSpellChecker checker;
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/JSONResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/JSONResponseWriter.java?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/JSONResponseWriter.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/JSONResponseWriter.java Tue Sep 29 14:43:03 2015
@@ -42,7 +42,7 @@ import org.apache.solr.search.SolrReturn
*/
public class JSONResponseWriter implements QueryResponseWriter {
- static String CONTENT_TYPE_JSON_UTF8 = "application/json; charset=UTF-8";
+ public static String CONTENT_TYPE_JSON_UTF8 = "application/json; charset=UTF-8";
private String contentType = CONTENT_TYPE_JSON_UTF8;
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java Tue Sep 29 14:43:03 2015
@@ -174,7 +174,7 @@ public class TestSolrConfigHandler exten
}
- public static void reqhandlertests(RestTestHarness writeHarness, String testServerBaseUrl, CloudSolrClient cloudSolrServer) throws Exception {
+ public static void reqhandlertests(RestTestHarness writeHarness, String testServerBaseUrl, CloudSolrClient cloudSolrClient) throws Exception {
String payload = "{\n" +
"'create-requesthandler' : { 'name' : '/x', 'class': 'org.apache.solr.handler.DumpRequestHandler' , 'startup' : 'lazy'}\n" +
"}";
@@ -183,7 +183,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config/overlay?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("overlay", "requestHandler", "/x", "startup"),
"lazy",
10);
@@ -196,7 +196,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config/overlay?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("overlay", "requestHandler", "/x", "a"),
"b",
10);
@@ -204,7 +204,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/x?wt=json&getdefaults=true&json.nl=map",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("getdefaults", "def_a"),
"def A val",
10);
@@ -212,7 +212,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/x?wt=json¶m=multival&json.nl=map",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("params", "multival"),
Arrays.asList("a", "b", "c"),
10);
@@ -226,7 +226,7 @@ public class TestSolrConfigHandler exten
int maxTimeoutSeconds = 10;
while (TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) {
String uri = "/config/overlay?wt=json";
- Map m = testServerBaseUrl == null ? getRespMap(uri, writeHarness) : TestSolrConfigHandlerConcurrent.getAsMap(testServerBaseUrl + uri, cloudSolrServer);
+ Map m = testServerBaseUrl == null ? getRespMap(uri, writeHarness) : TestSolrConfigHandlerConcurrent.getAsMap(testServerBaseUrl + uri, cloudSolrClient);
if (null == Utils.getObjectByPath(m, true, Arrays.asList("overlay", "requestHandler", "/x", "a"))) {
success = true;
break;
@@ -243,7 +243,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "queryConverter", "qc", "class"),
"org.apache.solr.spelling.SpellingQueryConverter",
10);
@@ -254,7 +254,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "queryConverter", "qc", "class"),
"org.apache.solr.spelling.SuggestQueryConverter",
10);
@@ -266,7 +266,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "queryConverter", "qc"),
null,
10);
@@ -278,7 +278,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "searchComponent", "tc", "class"),
"org.apache.solr.handler.component.TermsComponent",
10);
@@ -289,7 +289,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "searchComponent", "tc", "class"),
"org.apache.solr.handler.component.TermVectorComponent",
10);
@@ -301,7 +301,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "searchComponent", "tc"),
null,
10);
@@ -313,7 +313,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "valueSourceParser", "cu", "class"),
"org.apache.solr.core.CountUsageValueSourceParser",
10);
@@ -327,7 +327,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "valueSourceParser", "cu", "class"),
"org.apache.solr.search.function.NvlValueSourceParser",
10);
@@ -339,7 +339,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "valueSourceParser", "cu"),
null,
10);
@@ -353,7 +353,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "transformer", "mytrans", "class"),
"org.apache.solr.response.transform.ValueAugmenterFactory",
10);
@@ -365,7 +365,7 @@ public class TestSolrConfigHandler exten
testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "transformer", "mytrans", "value"),
"6",
10);
@@ -378,7 +378,7 @@ public class TestSolrConfigHandler exten
Map map = testForResponseElement(writeHarness,
testServerBaseUrl,
"/config?wt=json",
- cloudSolrServer,
+ cloudSolrClient,
Arrays.asList("config", "transformer", "mytrans"),
null,
10);
@@ -387,6 +387,28 @@ public class TestSolrConfigHandler exten
assertNotNull("no object /config/initParams : "+ TestBlobHandler.getAsString(map) , l);
assertEquals( 1, l.size());
assertEquals( "val", ((Map)l.get(0)).get("key") );
+
+
+ payload = "{\n" +
+ " 'add-searchcomponent': {\n" +
+ " 'name': 'myspellcheck',\n" +
+ " 'class': 'solr.SpellCheckComponent',\n" +
+ " 'queryAnalyzerFieldType': 'text_general',\n" +
+ " 'spellchecker': {\n" +
+ " 'name': 'default',\n" +
+ " 'field': '_text_',\n" +
+ " 'class': 'solr.DirectSolrSpellChecker'\n" +
+ " }\n" +
+ " }\n" +
+ "}";
+ runConfigCommand(writeHarness, "/config?wt=json", payload);
+ map = testForResponseElement(writeHarness,
+ testServerBaseUrl,
+ "/config?wt=json",
+ cloudSolrClient,
+ Arrays.asList("config", "searchComponent","myspellcheck", "spellchecker", "class"),
+ "solr.DirectSolrSpellChecker",
+ 10);
}
public static Map testForResponseElement(RestTestHarness harness,
Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/CommonParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/CommonParams.java?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/CommonParams.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/CommonParams.java Tue Sep 29 14:43:03 2015
@@ -169,6 +169,7 @@ public interface CommonParams {
public static final String CONFIGSETS_HANDLER_PATH = "/admin/configs";
public static final String AUTHZ_PATH = "/admin/authorization";
public static final String AUTHC_PATH = "/admin/authentication";
+ public static final String ZK_PATH = "/admin/zookeeper";
/** valid values for: <code>echoParams</code> */
public enum EchoParamStyle {
Modified: lucene/dev/branches/branch_5x/solr/webapp/web/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/webapp/web/WEB-INF/web.xml?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/webapp/web/WEB-INF/web.xml (original)
+++ lucene/dev/branches/branch_5x/solr/webapp/web/WEB-INF/web.xml Tue Sep 29 14:43:03 2015
@@ -76,11 +76,6 @@
</filter-mapping>
<servlet>
- <servlet-name>Zookeeper</servlet-name>
- <servlet-class>org.apache.solr.servlet.ZookeeperInfoServlet</servlet-class>
- </servlet>
-
- <servlet>
<servlet-name>LoadAdminUI</servlet-name>
<servlet-class>org.apache.solr.servlet.LoadAdminUiServlet</servlet-class>
</servlet>
@@ -101,10 +96,10 @@
<servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
<init-param>
<param-name>destination</param-name>
- <param-value>${context}/zookeeper</param-value>
+ <param-value>${context}/admin/zookeeper</param-value>
</init-param>
</servlet>
-
+
<servlet>
<servlet-name>RedirectLogging</servlet-name>
<servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
@@ -136,16 +131,14 @@
<url-pattern>/zookeeper.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
+ <servlet-name>RedirectOldZookeeper</servlet-name>
+ <url-pattern>/zookeeper</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
<servlet-name>RedirectLogging</servlet-name>
<url-pattern>/logging</url-pattern>
</servlet-mapping>
- <!-- Servlet Mapping -->
- <servlet-mapping>
- <servlet-name>Zookeeper</servlet-name>
- <url-pattern>/zookeeper</url-pattern>
- </servlet-mapping>
-
<servlet-mapping>
<servlet-name>LoadAdminUI</servlet-name>
<url-pattern>/admin.html</url-pattern>
Modified: lucene/dev/branches/branch_5x/solr/webapp/web/js/angular/services.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/webapp/web/js/angular/services.js?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/webapp/web/js/angular/services.js (original)
+++ lucene/dev/branches/branch_5x/solr/webapp/web/js/angular/services.js Tue Sep 29 14:43:03 2015
@@ -60,7 +60,7 @@ solrAdminServices.factory('System',
}])
.factory('Zookeeper',
['$resource', function($resource) {
- return $resource('/solr/zookeeper', {wt:'json', _:Date.now()}, {
+ return $resource('/solr/admin/zookeeper', {wt:'json', _:Date.now()}, {
"simple": {},
"dump": {params: {dump: "true"}},
"liveNodes": {params: {path: '/live_nodes'}},
Modified: lucene/dev/branches/branch_5x/solr/webapp/web/js/scripts/cloud.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/webapp/web/js/scripts/cloud.js?rev=1705870&r1=1705869&r2=1705870&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/webapp/web/js/scripts/cloud.js (original)
+++ lucene/dev/branches/branch_5x/solr/webapp/web/js/scripts/cloud.js Tue Sep 29 14:43:03 2015
@@ -91,7 +91,7 @@ var init_debug = function( cloud_element
$.ajax
(
{
- url : app.config.solr_path + '/zookeeper?wt=json&dump=true',
+ url : app.config.solr_path + '/admin/zookeeper?wt=json&dump=true',
dataType : 'text',
context : debug_element,
beforeSend : function( xhr, settings )
@@ -455,7 +455,7 @@ var prepare_graph = function( graph_elem
$.ajax
(
{
- url : app.config.solr_path + '/zookeeper?wt=json&path=%2Flive_nodes',
+ url : app.config.solr_path + '/admin/zookeeper?wt=json&path=%2Flive_nodes',
dataType : 'json',
success : function( response, text_status, xhr )
{
@@ -467,7 +467,7 @@ var prepare_graph = function( graph_elem
var start = $( '#cloudGraphPagingStart' ).val();
var rows = $( '#cloudGraphPagingRows' ).val();
- var clusterStateUrl = app.config.solr_path + '/zookeeper?wt=json&detail=true&path=%2Fclusterstate.json&view=graph';
+ var clusterStateUrl = app.config.solr_path + '/admin/zookeeper?wt=json&detail=true&path=%2Fclusterstate.json&view=graph';
if (start && rows)
clusterStateUrl += ('&start='+start+'&rows='+rows);
@@ -591,7 +591,7 @@ var init_tree = function( tree_element )
$.ajax
(
{
- url : app.config.solr_path + '/zookeeper?wt=json',
+ url : app.config.solr_path + '/admin/zookeeper?wt=json',
dataType : 'json',
context : tree_element,
beforeSend : function( xhr, settings )
@@ -859,7 +859,7 @@ sammy.get
$.ajax
(
{
- url : app.config.solr_path + '/zookeeper?wt=json',
+ url : app.config.solr_path + '/admin/zookeeper?wt=json',
dataType : 'json',
context : cloud_element,
success : function( response, text_status, xhr )