You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/01/10 18:59:23 UTC
svn commit: r1557206 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/handler/component/
core/src/java/org/apache/solr/spelling/suggest/
core/src/test-files/solr/collection1/conf/
core/src/test/org/apache/solr/handler/component/ core/src/t...
Author: rmuir
Date: Fri Jan 10 17:59:22 2014
New Revision: 1557206
URL: http://svn.apache.org/r1557206
Log:
SOLR-5529: add support for queries to use multiple suggesters in SuggestComponent
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SuggestComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SolrSuggester.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterParams.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterResult.java
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-phrasesuggest.xml
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/DistributedSuggestComponentTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestFileDictionaryLookup.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestHighFrequencyDictionaryFactory.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Fri Jan 10 17:59:22 2014
@@ -142,6 +142,9 @@ New Features
* SOLR-5463: new 'cursorMark' request param for deep paging of sorted result sets
(sarowe, hossman)
+* SOLR-5529: Add support for queries to use multiple suggesters.
+ (Areek Zillur, Erick Erickson, via Robert Muir)
+
Bug Fixes
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SuggestComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SuggestComponent.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SuggestComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SuggestComponent.java Fri Jan 10 17:59:22 2014
@@ -19,8 +19,11 @@ package org.apache.solr.handler.componen
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -144,21 +147,27 @@ public class SuggestComponent extends Se
if (!params.getBool(COMPONENT_NAME, false)) {
return;
}
-
- SolrSuggester suggester = getSuggester(params);
- if (suggester == null) {
- if (params.get(SUGGEST_DICT) != null) {
- throw new IllegalArgumentException("No suggester named " + params.get(SUGGEST_DICT) +" was configured");
- } else {
- throw new IllegalArgumentException("No default suggester was configured");
- }
+
+ boolean buildAll = params.getBool(SUGGEST_BUILD_ALL, false);
+ boolean reloadAll = params.getBool(SUGGEST_RELOAD_ALL, false);
+
+ final Collection<SolrSuggester> querysuggesters;
+ if (buildAll || reloadAll) {
+ querysuggesters = suggesters.values();
+ } else {
+ querysuggesters = getSuggesters(params);
}
- if (params.getBool(SUGGEST_BUILD, false)) {
- suggester.build(rb.req.getCore(), rb.req.getSearcher());
- rb.rsp.add("command", "build");
- } else if (params.getBool(SUGGEST_RELOAD, false)) {
- suggester.reload(rb.req.getCore(), rb.req.getSearcher());
- rb.rsp.add("command", "reload");
+
+ if (params.getBool(SUGGEST_BUILD, false) || buildAll) {
+ for (SolrSuggester suggester : querysuggesters) {
+ suggester.build(rb.req.getCore(), rb.req.getSearcher());
+ }
+ rb.rsp.add("command", (!buildAll) ? "build" : "buildAll");
+ } else if (params.getBool(SUGGEST_RELOAD, false) || reloadAll) {
+ for (SolrSuggester suggester : querysuggesters) {
+ suggester.reload(rb.req.getCore(), rb.req.getSearcher());
+ }
+ rb.rsp.add("command", (!reloadAll) ? "reload" : "reloadAll");
}
}
@@ -193,7 +202,19 @@ public class SuggestComponent extends Se
return;
}
- SolrSuggester suggester = getSuggester(params);
+ boolean buildAll = params.getBool(SUGGEST_BUILD_ALL, false);
+ boolean reloadAll = params.getBool(SUGGEST_RELOAD_ALL, false);
+ Set<SolrSuggester> querySuggesters;
+ try {
+ querySuggesters = getSuggesters(params);
+ } catch(IllegalArgumentException ex) {
+ if (!buildAll && !reloadAll) {
+ throw ex;
+ } else {
+ querySuggesters = new HashSet<SolrSuggester>();
+ }
+ }
+
String query = params.get(SUGGEST_Q);
if (query == null) {
query = rb.getQueryString();
@@ -204,11 +225,14 @@ public class SuggestComponent extends Se
if (query != null) {
int count = params.getInt(SUGGEST_COUNT, 1);
- SuggesterOptions options = new SuggesterOptions(new CharsRef(query), count);
- SuggesterResult suggesterResult = suggester.getSuggestions(options);
-
- NamedList<NamedList<Object>> namedListResult = toNamedList(suggesterResult);
- rb.rsp.add(SuggesterResultLabels.SUGGEST, namedListResult);
+ SuggesterOptions options = new SuggesterOptions(new CharsRef(query), count);
+ Map<String, SimpleOrderedMap<NamedList<Object>>> namedListResults =
+ new HashMap<String, SimpleOrderedMap<NamedList<Object>>>();
+ for (SolrSuggester suggester : querySuggesters) {
+ SuggesterResult suggesterResult = suggester.getSuggestions(options);
+ toNamedList(suggesterResult, namedListResults);
+ }
+ rb.rsp.add(SuggesterResultLabels.SUGGEST, namedListResults);
}
}
@@ -224,7 +248,6 @@ public class SuggestComponent extends Se
int count = params.getInt(SUGGEST_COUNT, 1);
List<SuggesterResult> suggesterResults = new ArrayList<SuggesterResult>();
- NamedList<NamedList<Object>> namedListResult = null;
// Collect Shard responses
for (ShardRequest sreq : rb.finished) {
@@ -232,8 +255,8 @@ public class SuggestComponent extends Se
NamedList<Object> resp;
if((resp = srsp.getSolrResponse().getResponse()) != null) {
@SuppressWarnings("unchecked")
- NamedList<NamedList<Object>> namedList =
- (NamedList<NamedList<Object>>) resp.get(SuggesterResultLabels.SUGGEST);
+ Map<String, SimpleOrderedMap<NamedList<Object>>> namedList =
+ (Map<String, SimpleOrderedMap<NamedList<Object>>>) resp.get(SuggesterResultLabels.SUGGEST);
LOG.info(srsp.getShard() + " : " + namedList);
suggesterResults.add(toSuggesterResult(namedList));
}
@@ -242,9 +265,11 @@ public class SuggestComponent extends Se
// Merge Shard responses
SuggesterResult suggesterResult = merge(suggesterResults, count);
- namedListResult = toNamedList(suggesterResult);
-
- rb.rsp.add(SuggesterResultLabels.SUGGEST, namedListResult);
+ Map<String, SimpleOrderedMap<NamedList<Object>>> namedListResults =
+ new HashMap<String, SimpleOrderedMap<NamedList<Object>>>();
+ toNamedList(suggesterResult, namedListResults);
+
+ rb.rsp.add(SuggesterResultLabels.SUGGEST, namedListResults);
}
/**
@@ -254,33 +279,36 @@ public class SuggestComponent extends Se
* weights
* */
private static SuggesterResult merge(List<SuggesterResult> suggesterResults, int count) {
- if (suggesterResults.size() == 1) {
- return suggesterResults.get(0);
- }
SuggesterResult result = new SuggesterResult();
Set<String> allTokens = new HashSet<String>();
+ Set<String> suggesterNames = new HashSet<String>();
// collect all tokens
for (SuggesterResult shardResult : suggesterResults) {
- allTokens.addAll(shardResult.getTokens());
+ for (String suggesterName : shardResult.getSuggesterNames()) {
+ allTokens.addAll(shardResult.getTokens(suggesterName));
+ suggesterNames.add(suggesterName);
+ }
}
// Get Top N for every token in every shard (using weights)
- for (String token : allTokens) {
- Lookup.LookupPriorityQueue resultQueue = new Lookup.LookupPriorityQueue(
- count);
- for (SuggesterResult shardResult : suggesterResults) {
- List<LookupResult> suggests = shardResult.getLookupResult(token);
- if (suggests == null) {
- continue;
- }
- for (LookupResult res : suggests) {
- resultQueue.insertWithOverflow(res);
+ for (String suggesterName : suggesterNames) {
+ for (String token : allTokens) {
+ Lookup.LookupPriorityQueue resultQueue = new Lookup.LookupPriorityQueue(
+ count);
+ for (SuggesterResult shardResult : suggesterResults) {
+ List<LookupResult> suggests = shardResult.getLookupResult(suggesterName, token);
+ if (suggests == null) {
+ continue;
+ }
+ for (LookupResult res : suggests) {
+ resultQueue.insertWithOverflow(res);
+ }
}
+ List<LookupResult> sortedSuggests = new LinkedList<LookupResult>();
+ Collections.addAll(sortedSuggests, resultQueue.getResults());
+ result.add(suggesterName, token, sortedSuggests);
}
- List<LookupResult> sortedSuggests = new LinkedList<LookupResult>();
- Collections.addAll(sortedSuggests, resultQueue.getResults());
- result.add(token, sortedSuggests);
}
return result;
}
@@ -315,72 +343,96 @@ public class SuggestComponent extends Se
return sizeInBytes;
}
- private SolrSuggester getSuggester(SolrParams params) {
- return suggesters.get(getSuggesterName(params));
+ private Set<SolrSuggester> getSuggesters(SolrParams params) {
+ Set<SolrSuggester> solrSuggesters = new HashSet<SolrSuggester>();
+ for(String suggesterName : getSuggesterNames(params)) {
+ SolrSuggester curSuggester = suggesters.get(suggesterName);
+ if (curSuggester != null) {
+ solrSuggesters.add(curSuggester);
+ } else {
+ throw new IllegalArgumentException("No suggester named " + suggesterName +" was configured");
+ }
+ }
+ if (solrSuggesters.size() == 0) {
+ throw new IllegalArgumentException("No default suggester was configured");
+ }
+ return solrSuggesters;
}
- private String getSuggesterName(SolrParams params){
- return (params.get(SUGGEST_DICT) != null) ?
- (String)params.get(SUGGEST_DICT)
- : DEFAULT_DICT_NAME;
-
+ private Set<String> getSuggesterNames(SolrParams params) {
+ Set<String> suggesterNames = new HashSet<String>();
+ String[] suggesterNamesFromParams = params.getParams(SUGGEST_DICT);
+ if (suggesterNamesFromParams == null) {
+ suggesterNames.add(DEFAULT_DICT_NAME);
+ } else {
+ for (String name : suggesterNamesFromParams) {
+ suggesterNames.add(name);
+ }
+ }
+ return suggesterNames;
}
/** Convert {@link SuggesterResult} to NamedList for constructing responses */
- private NamedList<NamedList<Object>> toNamedList(SuggesterResult suggesterResult) {
- NamedList<NamedList<Object>> results = new SimpleOrderedMap<NamedList<Object>>();
- for (String token : suggesterResult.getTokens()) {
- SimpleOrderedMap<Object> suggestionBody = new SimpleOrderedMap<Object>();
- List<LookupResult> lookupResults = suggesterResult.getLookupResult(token);
- suggestionBody.add(SuggesterResultLabels.SUGGESTION_NUM_FOUND, lookupResults.size());
- List<SimpleOrderedMap<Object>> suggestEntriesNamedList = new ArrayList<SimpleOrderedMap<Object>>();
- for (LookupResult lookupResult : lookupResults) {
- String suggestionString = lookupResult.key.toString();
- long weight = lookupResult.value;
- String payload = (lookupResult.payload != null) ?
- lookupResult.payload.utf8ToString()
- : "";
-
- SimpleOrderedMap<Object> suggestEntryNamedList = new SimpleOrderedMap<Object>();
- suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_TERM, suggestionString);
- suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_WEIGHT, weight);
- suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_PAYLOAD, payload);
- suggestEntriesNamedList.add(suggestEntryNamedList);
-
+ private void toNamedList(SuggesterResult suggesterResult, Map<String, SimpleOrderedMap<NamedList<Object>>> resultObj) {
+ for(String suggesterName : suggesterResult.getSuggesterNames()) {
+ SimpleOrderedMap<NamedList<Object>> results = new SimpleOrderedMap<NamedList<Object>>();
+ for (String token : suggesterResult.getTokens(suggesterName)) {
+ SimpleOrderedMap<Object> suggestionBody = new SimpleOrderedMap<Object>();
+ List<LookupResult> lookupResults = suggesterResult.getLookupResult(suggesterName, token);
+ suggestionBody.add(SuggesterResultLabels.SUGGESTION_NUM_FOUND, lookupResults.size());
+ List<SimpleOrderedMap<Object>> suggestEntriesNamedList = new ArrayList<SimpleOrderedMap<Object>>();
+ for (LookupResult lookupResult : lookupResults) {
+ String suggestionString = lookupResult.key.toString();
+ long weight = lookupResult.value;
+ String payload = (lookupResult.payload != null) ?
+ lookupResult.payload.utf8ToString()
+ : "";
+
+ SimpleOrderedMap<Object> suggestEntryNamedList = new SimpleOrderedMap<Object>();
+ suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_TERM, suggestionString);
+ suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_WEIGHT, weight);
+ suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_PAYLOAD, payload);
+ suggestEntriesNamedList.add(suggestEntryNamedList);
+
+ }
+ suggestionBody.add(SuggesterResultLabels.SUGGESTIONS, suggestEntriesNamedList);
+ results.add(token, suggestionBody);
}
- suggestionBody.add(SuggesterResultLabels.SUGGESTIONS, suggestEntriesNamedList);
- results.add(token, suggestionBody);
+ resultObj.put(suggesterName, results);
}
- return results;
}
/** Convert NamedList (suggester response) to {@link SuggesterResult} */
- private SuggesterResult toSuggesterResult(NamedList<NamedList<Object>> suggestions) {
+ private SuggesterResult toSuggesterResult(Map<String, SimpleOrderedMap<NamedList<Object>>> suggestionsMap) {
SuggesterResult result = new SuggesterResult();
- if (suggestions == null) {
+ if (suggestionsMap == null) {
return result;
}
// for each token
- for(int i = 0; i < suggestions.size() ; i++) {
- String tokenString = suggestions.getName(i);
- List<LookupResult> lookupResults = new ArrayList<LookupResult>();
- NamedList<Object> suggestion = (NamedList<Object>) suggestions.getVal(i);
- // for each suggestion
- for (int j = 0; j < suggestion.size(); j++) {
- String property = suggestion.getName(j);
- if (property.equals(SuggesterResultLabels.SUGGESTIONS)) {
- @SuppressWarnings("unchecked")
- List<NamedList<Object>> suggestionEntries = (List<NamedList<Object>>) suggestion.getVal(j);
- for(NamedList<Object> suggestionEntry : suggestionEntries) {
- String term = (String) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_TERM);
- Long weight = (Long) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_WEIGHT);
- String payload = (String) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_PAYLOAD);
- LookupResult res = new LookupResult(new CharsRef(term), weight, new BytesRef(payload));
- lookupResults.add(res);
+ for(Map.Entry<String, SimpleOrderedMap<NamedList<Object>>> entry : suggestionsMap.entrySet()) {
+ String suggesterName = entry.getKey();
+ for (Iterator<Map.Entry<String, NamedList<Object>>> suggestionsIter = entry.getValue().iterator(); suggestionsIter.hasNext();) {
+ Map.Entry<String, NamedList<Object>> suggestions = suggestionsIter.next();
+ String tokenString = suggestions.getKey();
+ List<LookupResult> lookupResults = new ArrayList<LookupResult>();
+ NamedList<Object> suggestion = suggestions.getValue();
+ // for each suggestion
+ for (int j = 0; j < suggestion.size(); j++) {
+ String property = suggestion.getName(j);
+ if (property.equals(SuggesterResultLabels.SUGGESTIONS)) {
+ @SuppressWarnings("unchecked")
+ List<NamedList<Object>> suggestionEntries = (List<NamedList<Object>>) suggestion.getVal(j);
+ for(NamedList<Object> suggestionEntry : suggestionEntries) {
+ String term = (String) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_TERM);
+ Long weight = (Long) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_WEIGHT);
+ String payload = (String) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_PAYLOAD);
+ LookupResult res = new LookupResult(new CharsRef(term), weight, new BytesRef(payload));
+ lookupResults.add(res);
+ }
}
+ result.add(suggesterName, tokenString, lookupResults);
}
- result.add(tokenString, lookupResults);
}
}
return result;
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SolrSuggester.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SolrSuggester.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SolrSuggester.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SolrSuggester.java Fri Jan 10 17:59:22 2014
@@ -179,7 +179,7 @@ public class SolrSuggester {
SuggesterResult res = new SuggesterResult();
List<LookupResult> suggestions = lookup.lookup(options.token, false, options.count);
- res.add(options.token.toString(), suggestions);
+ res.add(getName(), options.token.toString(), suggestions);
return res;
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterParams.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterParams.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterParams.java Fri Jan 10 17:59:22 2014
@@ -47,10 +47,23 @@ public interface SuggesterParams {
* Whether to build the index or not. Optional and false by default.
*/
public static final String SUGGEST_BUILD = SUGGEST_PREFIX + "build";
+
+ /**
+ * Whether to build the index or not for all suggesters in the component.
+ * Optional and false by default.
+ * This parameter does not need any suggest dictionary names to be specified
+ */
+ public static final String SUGGEST_BUILD_ALL = SUGGEST_PREFIX + "buildAll";
/**
* Whether to reload the index. Optional and false by default.
*/
public static final String SUGGEST_RELOAD = SUGGEST_PREFIX + "reload";
+ /**
+ * Whether to reload the index or not for all suggesters in the component.
+ * Optional and false by default.
+ * This parameter does not need any suggest dictionary names to be specified
+ */
+ public static final String SUGGEST_RELOAD_ALL = SUGGEST_PREFIX + "reloadAll";
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterResult.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterResult.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterResult.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/SuggesterResult.java Fri Jan 10 17:59:22 2014
@@ -17,7 +17,9 @@ package org.apache.solr.spelling.suggest
* limitations under the License.
*/
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -32,14 +34,19 @@ public class SuggesterResult {
public SuggesterResult() {}
/** token -> lookup results mapping*/
- private Map<String, List<LookupResult>> suggestions = new HashMap<String, List<LookupResult>>();
+ private Map<String, Map<String, List<LookupResult>>> suggestionsMap =
+ new HashMap<String, Map<String, List<LookupResult>>>();
/** Add suggestion results for <code>token</code> */
- public void add(String token, List<LookupResult> results) {
- List<LookupResult> res = this.suggestions.get(token);
+ public void add(String suggesterName, String token, List<LookupResult> results) {
+ Map<String, List<LookupResult>> suggesterRes = this.suggestionsMap.get(suggesterName);
+ if (suggesterRes == null) {
+ this.suggestionsMap.put(suggesterName, new HashMap<String, List<LookupResult>>());
+ }
+ List<LookupResult> res = this.suggestionsMap.get(suggesterName).get(token);
if (res == null) {
res = results;
- this.suggestions.put(token, res);
+ this.suggestionsMap.get(suggesterName).put(token, res);
}
}
@@ -48,15 +55,27 @@ public class SuggesterResult {
* null can be returned, if there are no lookup results
* for the <code>token</code>
* */
- public List<LookupResult> getLookupResult(String token) {
- return this.suggestions.get(token);
+ public List<LookupResult> getLookupResult(String suggesterName, String token) {
+ return (this.suggestionsMap.containsKey(suggesterName))
+ ? this.suggestionsMap.get(suggesterName).get(token)
+ : new ArrayList<LookupResult>();
}
/**
* Get the set of tokens that are present in the
* instance
*/
- public Set<String> getTokens() {
- return this.suggestions.keySet();
+ public Set<String> getTokens(String suggesterName) {
+ return (this.suggestionsMap.containsKey(suggesterName))
+ ? this.suggestionsMap.get(suggesterName).keySet()
+ : new HashSet<String>();
+ }
+
+ /**
+ * Get the set of suggesterNames for which this
+ * instance holds results
+ */
+ public Set<String> getSuggesterNames() {
+ return this.suggestionsMap.keySet();
}
}
Modified: lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-phrasesuggest.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-phrasesuggest.xml?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-phrasesuggest.xml (original)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-phrasesuggest.xml Fri Jan 10 17:59:22 2014
@@ -254,7 +254,6 @@
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/fuzzy_suggest_analyzing_with_file_dict">
<lst name="defaults">
<str name="suggest">true</str>
- <str name="suggest.dictionary">fuzzy_suggest_analyzing_with_file_dict</str>
</lst>
<arr name="components">
<str>fuzzy_suggest_analyzing_with_file_dict</str>
@@ -264,7 +263,6 @@
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/fuzzy_suggest_analyzing_with_high_freq_dict">
<lst name="defaults">
<str name="suggest">true</str>
- <str name="suggest.dictionary">fuzzy_suggest_analyzing_with_high_freq_dict</str>
</lst>
<arr name="components">
<str>fuzzy_suggest_analyzing_with_high_freq_dict</str>
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/DistributedSuggestComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/DistributedSuggestComponentTest.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/DistributedSuggestComponentTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/DistributedSuggestComponentTest.java Fri Jan 10 17:59:22 2014
@@ -20,6 +20,7 @@ package org.apache.solr.handler.componen
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import junit.framework.Assert;
@@ -27,6 +28,7 @@ import org.apache.lucene.util.LuceneTest
import org.apache.solr.BaseDistributedSearchTestCase;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.spelling.suggest.SuggesterParams;
import org.junit.BeforeClass;
@@ -67,9 +69,10 @@ public class DistributedSuggestComponent
{
NamedList<Object> nl = control.getResponse();
@SuppressWarnings("unchecked")
- NamedList<Object> sc = (NamedList<Object>) nl.get("suggest");
- if(sc.size()==0) {
- Assert.fail("Control data did not return any suggestions.");
+ Map<String, SimpleOrderedMap<NamedList<Object>>> sc = (Map<String, SimpleOrderedMap<NamedList<Object>>>) nl.get("suggest");
+ String command = (String) nl.get("command");
+ if(sc.size() == 0 && command == null) {
+ Assert.fail("Control data did not return any suggestions or execute any command");
}
}
@@ -100,12 +103,17 @@ public class DistributedSuggestComponent
//Shortcut names
String build = SuggesterParams.SUGGEST_BUILD;
+ String buildAll = SuggesterParams.SUGGEST_BUILD_ALL;
String count = SuggesterParams.SUGGEST_COUNT;
String dictionaryName = SuggesterParams.SUGGEST_DICT;
- //Build the suggest dictionary
- query(buildRequest("", true, requestHandlerName, build, "true", dictionaryName, docDictName));
- query(buildRequest("", true, requestHandlerName, build, "true", dictionaryName, docExprDictName));
+ //Build the suggest dictionary
+ if (random().nextBoolean()) { // build all the suggesters in one go
+ query(buildRequest("", true, requestHandlerName, buildAll, "true"));
+ } else { // build suggesters individually
+ query(buildRequest("", true, requestHandlerName, build, "true", dictionaryName, docDictName));
+ query(buildRequest("", true, requestHandlerName, build, "true", dictionaryName, docExprDictName));
+ }
//Test Basic Functionality
query(buildRequest("exampel", false, requestHandlerName, dictionaryName, docDictName, count, "2"));
@@ -113,6 +121,9 @@ public class DistributedSuggestComponent
query(buildRequest("blah", true, requestHandlerName, dictionaryName, docExprDictName, count, "2"));
query(buildRequest("blah", true, requestHandlerName, dictionaryName, docDictName, count, "2"));
+ //Test multiSuggester
+ query(buildRequest("exampel", false, requestHandlerName, dictionaryName, docDictName, dictionaryName, docExprDictName, count, "2"));
+
}
private Object[] buildRequest(String q, boolean useSuggestQ, String handlerName, String... addlParams) {
List<Object> params = new ArrayList<Object>();
@@ -123,6 +134,7 @@ public class DistributedSuggestComponent
params.add("q");
}
params.add(q);
+
params.add("qt");
params.add(handlerName);
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java Fri Jan 10 17:59:22 2014
@@ -66,11 +66,11 @@ public class SuggestComponentTest extend
SuggesterParams.SUGGEST_BUILD, "true",
SuggesterParams.SUGGEST_Q, "exampel",
SuggesterParams.SUGGEST_COUNT, "2"),
- "//lst[@name='suggest']/lst[@name='exampel']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='45']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='40']"
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='45']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='40']"
);
assertQ(req("qt", rh,
@@ -78,11 +78,11 @@ public class SuggestComponentTest extend
SuggesterParams.SUGGEST_BUILD, "true",
SuggesterParams.SUGGEST_Q, "Rad",
SuggesterParams.SUGGEST_COUNT, "2"),
- "//lst[@name='suggest']/lst[@name='Rad']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='Rad']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='Rad fox']",
- "//lst[@name='suggest']/lst[@name='Rad']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='35']",
- "//lst[@name='suggest']/lst[@name='Rad']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='Red fox']",
- "//lst[@name='suggest']/lst[@name='Rad']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='30']"
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='Rad fox']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='35']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='Red fox']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='30']"
);
}
@@ -93,11 +93,11 @@ public class SuggestComponentTest extend
SuggesterParams.SUGGEST_BUILD, "true",
SuggesterParams.SUGGEST_Q, "exampel",
SuggesterParams.SUGGEST_COUNT, "2"),
- "//lst[@name='suggest']/lst[@name='exampel']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='120']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']",
- "//lst[@name='suggest']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='110']"
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='120']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='110']"
);
}
@@ -108,11 +108,62 @@ public class SuggestComponentTest extend
SuggesterParams.SUGGEST_BUILD, "true",
SuggesterParams.SUGGEST_Q, "chn",
SuggesterParams.SUGGEST_COUNT, "2"),
- "//lst[@name='suggest']/lst[@name='chn']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='chn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
- "//lst[@name='suggest']/lst[@name='chn']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='1']",
- "//lst[@name='suggest']/lst[@name='chn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']",
- "//lst[@name='suggest']/lst[@name='chn']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='1']"
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='1']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='1']"
);
}
+ @Test
+ public void testMultiSuggester() throws Exception {
+ assertQ(req("qt", rh,
+ SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_dict",
+ SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_expr_dict",
+ SuggesterParams.SUGGEST_BUILD, "true",
+ SuggesterParams.SUGGEST_Q, "exampel",
+ SuggesterParams.SUGGEST_COUNT, "2"),
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='45']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='40']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='120']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']",
+ "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='110']"
+ );
+ }
+
+ @Test
+ public void testBuildAllSuggester() throws Exception {
+ assertQ(req("qt", rh,
+ SuggesterParams.SUGGEST_BUILD_ALL, "true",
+ SuggesterParams.SUGGEST_Q, "exampel",
+ SuggesterParams.SUGGEST_COUNT, "2"),
+ "//str[@name='command'][.='buildAll']"
+ );
+
+ assertQ(req("qt", rh,
+ SuggesterParams.SUGGEST_BUILD_ALL, "true"),
+ "//str[@name='command'][.='buildAll']"
+ );
+ }
+
+ @Test
+ public void testReloadAllSuggester() throws Exception {
+ assertQ(req("qt", rh,
+ SuggesterParams.SUGGEST_RELOAD_ALL, "true",
+ SuggesterParams.SUGGEST_Q, "exampel",
+ SuggesterParams.SUGGEST_COUNT, "2"),
+ "//str[@name='command'][.='reloadAll']"
+ );
+
+ assertQ(req("qt", rh,
+ SuggesterParams.SUGGEST_RELOAD_ALL, "true"),
+ "//str[@name='command'][.='reloadAll']"
+ );
+ }
+
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestFileDictionaryLookup.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestFileDictionaryLookup.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestFileDictionaryLookup.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestFileDictionaryLookup.java Fri Jan 10 17:59:22 2014
@@ -22,39 +22,40 @@ import org.junit.BeforeClass;
public class TestFileDictionaryLookup extends SolrTestCaseJ4 {
static final String REQUEST_URI = "/fuzzy_suggest_analyzing_with_file_dict";
+ static final String DICT_NAME = "fuzzy_suggest_analyzing_with_file_dict";
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig-phrasesuggest.xml","schema-phrasesuggest.xml");
- assertQ(req("qt", REQUEST_URI, "q", "", SuggesterParams.SUGGEST_BUILD, "true"));
+ assertQ(req("qt", REQUEST_URI, "q", "", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_BUILD, "true"));
}
public void testDefault() throws Exception {
// tests to demonstrate default maxEdit parameter (value: 1), control for testWithMaxEdit2
- assertQ(req("qt", REQUEST_URI, "q", "chagn", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chagn']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='chagn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
- "//lst[@name='suggest']/lst[@name='chagn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
+ assertQ(req("qt", REQUEST_URI, "q", "chagn", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagn']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
);
- assertQ(req("qt", REQUEST_URI, "q", "chacn", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chacn']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='chacn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
- "//lst[@name='suggest']/lst[@name='chacn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
+ assertQ(req("qt", REQUEST_URI, "q", "chacn", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chacn']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chacn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chacn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
);
- assertQ(req("qt", REQUEST_URI, "q", "chagr", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chagr']/int[@name='numFound'][.='1']",
- "//lst[@name='suggest']/lst[@name='chagr']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='charge']"
+ assertQ(req("qt", REQUEST_URI, "q", "chagr", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagr']/int[@name='numFound'][.='1']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagr']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='charge']"
);
- assertQ(req("qt", REQUEST_URI, "q", "chanr", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chanr']/int[@name='numFound'][.='3']"
+ assertQ(req("qt", REQUEST_URI, "q", "chanr", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chanr']/int[@name='numFound'][.='3']"
);
- assertQ(req("qt", REQUEST_URI, "q", "cyhnce", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='cyhnce']/int[@name='numFound'][.='0']"
+ assertQ(req("qt", REQUEST_URI, "q", "cyhnce", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='cyhnce']/int[@name='numFound'][.='0']"
);
}
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestHighFrequencyDictionaryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestHighFrequencyDictionaryFactory.java?rev=1557206&r1=1557205&r2=1557206&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestHighFrequencyDictionaryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/suggest/TestHighFrequencyDictionaryFactory.java Fri Jan 10 17:59:22 2014
@@ -23,6 +23,7 @@ import org.junit.BeforeClass;
public class TestHighFrequencyDictionaryFactory extends SolrTestCaseJ4 {
static final String REQUEST_URI = "/fuzzy_suggest_analyzing_with_high_freq_dict";
+ static final String DICT_NAME = "fuzzy_suggest_analyzing_with_high_freq_dict";
@BeforeClass
public static void beforeClass() throws Exception {
@@ -39,36 +40,36 @@ public class TestHighFrequencyDictionary
"stext", "chance"));
assertU(commit());
- assertQ(req("qt", REQUEST_URI, "q", "", SuggesterParams.SUGGEST_BUILD, "true"));
+ assertQ(req("qt", REQUEST_URI, "q", "", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_BUILD, "true"));
}
public void testDefault() throws Exception {
// tests to demonstrate default maxEdit parameter (value: 1), control for testWithMaxEdit2
- assertQ(req("qt", REQUEST_URI, "q", "chagn", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chagn']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='chagn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
- "//lst[@name='suggest']/lst[@name='chagn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
+ assertQ(req("qt", REQUEST_URI, "q", "chagn", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagn']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
);
- assertQ(req("qt", REQUEST_URI, "q", "chacn", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chacn']/int[@name='numFound'][.='2']",
- "//lst[@name='suggest']/lst[@name='chacn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
- "//lst[@name='suggest']/lst[@name='chacn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
+ assertQ(req("qt", REQUEST_URI, "q", "chacn", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chacn']/int[@name='numFound'][.='2']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chacn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chacn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']"
);
- assertQ(req("qt", REQUEST_URI, "q", "chagr", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chagr']/int[@name='numFound'][.='1']",
- "//lst[@name='suggest']/lst[@name='chagr']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='charge']"
+ assertQ(req("qt", REQUEST_URI, "q", "chagr", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagr']/int[@name='numFound'][.='1']",
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chagr']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='charge']"
);
- assertQ(req("qt", REQUEST_URI, "q", "chanr", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='chanr']/int[@name='numFound'][.='3']"
+ assertQ(req("qt", REQUEST_URI, "q", "chanr", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='chanr']/int[@name='numFound'][.='3']"
);
- assertQ(req("qt", REQUEST_URI, "q", "cyhnce", SuggesterParams.SUGGEST_COUNT, "3"),
- "//lst[@name='suggest']/lst[@name='cyhnce']/int[@name='numFound'][.='0']"
+ assertQ(req("qt", REQUEST_URI, "q", "cyhnce", SuggesterParams.SUGGEST_DICT, DICT_NAME, SuggesterParams.SUGGEST_COUNT, "3"),
+ "//lst[@name='suggest']/lst[@name='"+ DICT_NAME +"']/lst[@name='cyhnce']/int[@name='numFound'][.='0']"
);
}
}