Author: gsingers
Date: Sat Nov 29 04:40:57 2008
New Revision: 721675
URL: http://svn.apache.org/viewvc?rev=721675&view=rev
Log:
SOLR-877: Added support for multiple fields, plus some more tests
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java
lucene/solr/trunk/src/test/org/apache/solr/handler/component/TermsComponentTest.java
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java?rev=721675&r1=721674&r2=721675&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java
Sat Nov 29 04:40:57 2008
@@ -31,7 +31,7 @@
* Return TermEnum information, useful for things like auto suggest.
*
* @see org.apache.solr.common.params.TermsParams
- * See Lucene's TermEnum class
+ * See Lucene's TermEnum class
*/
public class TermsComponent extends SearchComponent {
@@ -40,39 +40,46 @@
SolrParams params = rb.req.getParams();
if (params.getBool(TermsParams.TERMS, false)) {
String lower = params.get(TermsParams.TERMS_LOWER, "");
- String field = params.get(TermsParams.TERMS_FIELD);
- if (field != null) {
- Term lowerTerm = new Term(field, lower);
- TermEnum termEnum =
rb.req.getSearcher().getReader().terms(lowerTerm);//this will be positioned
ready to go
- int rows = params.getInt(TermsParams.TERMS_ROWS,
params.getInt(CommonParams.ROWS, 10));
- int i = 0;
+ String[] fields = params.getParams(TermsParams.TERMS_FIELD);
+ if (fields != null && fields.length > 0) {
NamedList terms = new NamedList();
rb.rsp.add("terms", terms);
- String upper = params.get(TermsParams.TERMS_UPPER);
- Term upperTerm = upper != null ? new Term(field, upper) : null;
- boolean upperIncl = params.getBool(TermsParams.TERMS_UPPER_INCLUSIVE,
false);
- boolean lowerIncl = params.getBool(TermsParams.TERMS_LOWER_INCLUSIVE,
true);
- boolean hasMore = true;
- if (lowerIncl == false) {
- hasMore = termEnum.next();
- }
- if (hasMore == true) {
- do {
- Term theTerm = termEnum.term();
- String theText = theTerm.text();
- int upperCmp = upperTerm != null ? theTerm.compareTo(upperTerm) :
-1;
- if (theTerm != null && theTerm.field().equals(field)
- && ((upperIncl == true && upperCmp <= 0) ||
- (upperIncl == false && upperCmp < 0))) {
- terms.add(theText, termEnum.docFreq());
- } else {//we're done
- break;
+
+ for (int j = 0; j < fields.length; j++) {
+ String field = fields[j];
+ Term lowerTerm = new Term(field, lower);
+ TermEnum termEnum =
rb.req.getSearcher().getReader().terms(lowerTerm);//this will be positioned
ready to go
+ int rows = params.getInt(TermsParams.TERMS_ROWS,
params.getInt(CommonParams.ROWS, 10));
+ int i = 0;
+ NamedList fieldTerms = new NamedList();
+ terms.add(field, fieldTerms);
+ String upper = params.get(TermsParams.TERMS_UPPER);
+ Term upperTerm = upper != null ? new Term(field, upper) : null;
+ boolean upperIncl =
params.getBool(TermsParams.TERMS_UPPER_INCLUSIVE, false);
+ boolean lowerIncl =
params.getBool(TermsParams.TERMS_LOWER_INCLUSIVE, true);
+ boolean hasMore = true;
+ if (lowerIncl == false) {
+ hasMore = termEnum.next();
+ }
+ if (hasMore == true) {
+ do {
+ Term theTerm = termEnum.term();
+ String theText = theTerm.text();
+ int upperCmp = upperTerm != null ? theTerm.compareTo(upperTerm)
: -1;
+ if (theTerm != null && theTerm.field().equals(field)
+ && ((upperIncl == true && upperCmp <= 0) ||
+ (upperIncl == false && upperCmp < 0))) {
+ fieldTerms.add(theText, termEnum.docFreq());
+ } else {//we're done
+ break;
+ }
+ i++;
}
- i++;
+ while (i < rows && termEnum.next());
}
- while (i < rows && termEnum.next());
+ termEnum.close();
}
- termEnum.close();
+
} else {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No
terms.fl parameter specified");
}
Modified:
lucene/solr/trunk/src/test/org/apache/solr/handler/component/TermsComponentTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/handler/component/TermsComponentTest.java?rev=721675&r1=721674&r2=721675&view=diff
==============================================================================
---
lucene/solr/trunk/src/test/org/apache/solr/handler/component/TermsComponentTest.java
(original)
+++
lucene/solr/trunk/src/test/org/apache/solr/handler/component/TermsComponentTest.java
Sat Nov 29 04:40:57 2008
@@ -46,16 +46,16 @@
public void setUp() throws Exception {
super.setUp();
- assertU(adoc("id", "0", "lowerfilt", "a"));
- assertU(adoc("id", "1", "lowerfilt", "a"));
- assertU(adoc("id", "2", "lowerfilt", "aa"));
- assertU(adoc("id", "3", "lowerfilt", "aaa"));
- assertU(adoc("id", "4", "lowerfilt", "ab"));
- assertU(adoc("id", "5", "lowerfilt", "abb"));
- assertU(adoc("id", "6", "lowerfilt", "abc"));
- assertU(adoc("id", "7", "lowerfilt", "b"));
- assertU(adoc("id", "8", "lowerfilt", "baa"));
- assertU(adoc("id", "9", "lowerfilt", "bbb"));
+ assertU(adoc("id", "0", "lowerfilt", "a", "standardfilt", "a"));
+ assertU(adoc("id", "1", "lowerfilt", "a", "standardfilt", "aa"));
+ assertU(adoc("id", "2", "lowerfilt", "aa", "standardfilt", "aaa"));
+ assertU(adoc("id", "3", "lowerfilt", "aaa", "standardfilt", "abbb"));
+ assertU(adoc("id", "4", "lowerfilt", "ab", "standardfilt", "b"));
+ assertU(adoc("id", "5", "lowerfilt", "abb", "standardfilt", "bb"));
+ assertU(adoc("id", "6", "lowerfilt", "abc", "standardfilt", "bbbb"));
+ assertU(adoc("id", "7", "lowerfilt", "b", "standardfilt", "c"));
+ assertU(adoc("id", "8", "lowerfilt", "baa", "standardfilt", "cccc"));
+ assertU(adoc("id", "9", "lowerfilt", "bbb", "standardfilt", "ccccc"));
assertU("commit", commit());
}
@@ -81,7 +81,8 @@
rsp.add("responseHeader", new SimpleOrderedMap());
handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
values = rsp.getValues();
- terms = (NamedList) values.get("terms");
+ terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
+
assertTrue("terms Size: " + terms.size() + " is not: " + 6, terms.size()
== 6);
assertTrue("a is null and it shouldn't be", terms.get("a") != null);
assertTrue("aa is null and it shouldn't be", terms.get("aa") != null);
@@ -91,6 +92,58 @@
assertTrue("abc is null and it shouldn't be", terms.get("abc") != null);
}
+ public void testNoField() throws Exception {
+ SolrCore core = h.getCore();
+ TermsComponent tc = (TermsComponent) core.getSearchComponent("termsComp");
+ assertTrue("tc is null and it shouldn't be", tc != null);
+
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add(TermsParams.TERMS, "true");
+ //no lower bound
+ params.add(TermsParams.TERMS_LOWER, "d");
+ params.add(TermsParams.TERMS_ROWS, String.valueOf(50));
+ SolrRequestHandler handler;
+ SolrQueryResponse rsp;
+
+ handler = core.getRequestHandler("/terms");
+ assertTrue("handler is null and it shouldn't be", handler != null);
+ rsp = new SolrQueryResponse();
+ rsp.add("responseHeader", new SimpleOrderedMap());
+ handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
+ Exception exception = rsp.getException();
+ assertTrue("exception is null and it shouldn't be", exception != null);
+ }
+
+
+ public void testMultipleFields() throws Exception {
+ SolrCore core = h.getCore();
+ TermsComponent tc = (TermsComponent) core.getSearchComponent("termsComp");
+ assertTrue("tc is null and it shouldn't be", tc != null);
+
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add(TermsParams.TERMS, "true");
+ params.add(TermsParams.TERMS_FIELD, "lowerfilt", "standardfilt");
+ //no lower bound
+ params.add(TermsParams.TERMS_UPPER, "b");
+ params.add(TermsParams.TERMS_ROWS, String.valueOf(50));
+ SolrRequestHandler handler;
+ SolrQueryResponse rsp;
+ NamedList values;
+ NamedList terms;
+ handler = core.getRequestHandler("/terms");
+ assertTrue("handler is null and it shouldn't be", handler != null);
+ rsp = new SolrQueryResponse();
+ rsp.add("responseHeader", new SimpleOrderedMap());
+ handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
+ values = rsp.getValues();
+ NamedList tmp = (NamedList) values.get("terms");
+ assertTrue("tmp Size: " + tmp.size() + " is not: " + 2, tmp.size() == 2);
+ terms = (NamedList) tmp.get("lowerfilt");
+ assertTrue("terms Size: " + terms.size() + " is not: " + 6, terms.size()
== 6);
+ terms = (NamedList) tmp.get("standardfilt");
+ assertTrue("terms Size: " + terms.size() + " is not: " + 4, terms.size()
== 4);
+ }
+
public void testPastUpper() throws Exception {
SolrCore core = h.getCore();
TermsComponent tc = (TermsComponent) core.getSearchComponent("termsComp");
@@ -112,7 +165,7 @@
rsp.add("responseHeader", new SimpleOrderedMap());
handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
values = rsp.getValues();
- terms = (NamedList) values.get("terms");
+ terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
assertTrue("terms Size: " + terms.size() + " is not: " + 0, terms.size()
== 0);
}
@@ -137,7 +190,7 @@
rsp.add("responseHeader", new SimpleOrderedMap());
handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
values = rsp.getValues();
- terms = (NamedList) values.get("terms");
+ terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
assertTrue("terms Size: " + terms.size() + " is not: " + 6, terms.size()
== 6);
assertTrue("aa is null and it shouldn't be", terms.get("aa") != null);
assertTrue("aaa is null and it shouldn't be", terms.get("aaa") != null);
@@ -152,7 +205,7 @@
rsp.add("responseHeader", new SimpleOrderedMap());
handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
values = rsp.getValues();
- terms = (NamedList) values.get("terms");
+ terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
assertTrue("terms Size: " + terms.size() + " is not: " + 7, terms.size()
== 7);
assertTrue("aa is null and it shouldn't be", terms.get("aa") != null);
assertTrue("ab is null and it shouldn't be", terms.get("ab") != null);
@@ -168,7 +221,7 @@
rsp.add("responseHeader", new SimpleOrderedMap());
handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
values = rsp.getValues();
- terms = (NamedList) values.get("terms");
+ terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
assertTrue("terms Size: " + terms.size() + " is not: " + 6, terms.size()
== 6);
assertTrue("aa is null and it shouldn't be", terms.get("aa") != null);
assertTrue("ab is null and it shouldn't be", terms.get("ab") != null);
@@ -191,7 +244,7 @@
rsp.add("responseHeader", new SimpleOrderedMap());
handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
values = rsp.getValues();
- terms = (NamedList) values.get("terms");
+ terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
assertTrue("terms Size: " + terms.size() + " is not: " + 2, terms.size()
== 2);
assertTrue("aa is null and it shouldn't be", terms.get("a") != null);
assertTrue("aaa is null and it shouldn't be", terms.get("aa") != null);