Author: gsingers
Date: Sat Nov 29 05:51:56 2008
New Revision: 721681

URL: http://svn.apache.org/viewvc?rev=721681&view=rev
Log:
SOLR-877: add in term prefix, change some param names, added more tests

Modified:
    lucene/solr/trunk/src/java/org/apache/solr/common/params/TermsParams.java
    
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/common/params/TermsParams.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/common/params/TermsParams.java?rev=721681&r1=721680&r2=721681&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/common/params/TermsParams.java 
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/common/params/TermsParams.java 
Sat Nov 29 05:51:56 2008
@@ -22,9 +22,14 @@
  *
  **/
 public class TermsParams {
-
+  /**
+   * The component name.  Set to true to turn on the TermsComponent
+   */
   public static final String TERMS = "terms";
 
+  /**
+   * Used for building up the other terms
+   */
   public static final String TERMS_PREFIX = TERMS + ".";
 
   /**
@@ -48,15 +53,17 @@
   /**
    * Optional.  If true, include the upper bound term in the results.  False 
by default.
    */
-  public static final String TERMS_UPPER_INCLUSIVE = TERMS_PREFIX + "upr.incl";
+  public static final String TERMS_UPPER_INCLUSIVE = TERMS_PREFIX + 
"upper.incl";
 
   /**
    * Optional.  If true, include the lower bound term in the results, 
otherwise skip to the next one.  True by default.
    */
-  public static final String TERMS_LOWER_INCLUSIVE = TERMS_PREFIX + "lwr.incl";
+  public static final String TERMS_LOWER_INCLUSIVE = TERMS_PREFIX + 
"lower.incl";
 
   /**
    * Optional.  The number of results to return.  If not specified, looks for 
[EMAIL PROTECTED] org.apache.solr.common.params.CommonParams#ROWS}.  If that's 
not specified, uses 10.
    */
   public static final String TERMS_ROWS = TERMS_PREFIX + "rows";
+
+  public static final String TERMS_PREFIX_STR = TERMS_PREFIX + "prefix";
 }

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=721681&r1=721680&r2=721681&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 05:51:56 2008
@@ -44,21 +44,27 @@
       if (fields != null && fields.length > 0) {
         NamedList terms = new NamedList();
         rb.rsp.add("terms", terms);
+        int rows = params.getInt(TermsParams.TERMS_ROWS, 
params.getInt(CommonParams.ROWS, 10));
+        if (rows < 0){
+          rows = Integer.MAX_VALUE;
+        }
 
+        String upper = params.get(TermsParams.TERMS_UPPER);
+        boolean upperIncl = params.getBool(TermsParams.TERMS_UPPER_INCLUSIVE, 
false);
+        boolean lowerIncl = params.getBool(TermsParams.TERMS_LOWER_INCLUSIVE, 
true);
+        String prefix = params.get(TermsParams.TERMS_PREFIX_STR);
         for (int j = 0; j < fields.length; j++) {
           String field = fields[j];
           Term lowerTerm = new Term(field, lower);
+          Term upperTerm = upper != null ? new Term(field, upper) : null;
           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) {
+          Term lowerTestTerm = termEnum.term();
+          //Only advance the enum if we are excluding the lower bound and the 
lower Term actually matches
+          if (lowerIncl == false && lowerTestTerm.field().equals(field) == 
true && lowerTestTerm.text().equals(lower)) {
             hasMore = termEnum.next();
           }
           if (hasMore == true) {
@@ -68,7 +74,9 @@
               int upperCmp = upperTerm != null ? theTerm.compareTo(upperTerm) 
: -1;
               if (theTerm != null && theTerm.field().equals(field)
                       && ((upperIncl == true && upperCmp <= 0) ||
-                      (upperIncl == false && upperCmp < 0))) {
+                      (upperIncl == false && upperCmp < 0))
+                      && (prefix == null || theText.startsWith(prefix))
+                      ) {
                 fieldTerms.add(theText, termEnum.docFreq());
               } else {//we're done
                 break;

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=721681&r1=721680&r2=721681&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 05:51:56 2008
@@ -144,6 +144,60 @@
     assertTrue("terms Size: " + terms.size() + " is not: " + 4, terms.size() 
== 4);
   }
 
+  public void testUnlimitedRows() 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, upper bound or rows
+    params.add(TermsParams.TERMS_ROWS, String.valueOf(-1));
+    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();
+    terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
+    assertTrue("terms Size: " + terms.size() + " is not: " + 9, terms.size() 
== 9);
+
+  }
+
+  public void testPrefix() 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");
+    params.add(TermsParams.TERMS_LOWER,  "aa");
+    params.add(TermsParams.TERMS_LOWER_INCLUSIVE, "false");
+    params.add(TermsParams.TERMS_PREFIX_STR, "aa");
+    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();
+    terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
+    assertTrue("terms Size: " + terms.size() + " is not: " + 1, terms.size() 
== 1);
+    Object value = terms.get("aaa");
+    assertTrue("value is null and it shouldn't be", value != null);
+  }
+
   public void testPastUpper() throws Exception {
     SolrCore core = h.getCore();
     TermsComponent tc = (TermsComponent) core.getSearchComponent("termsComp");
@@ -152,7 +206,7 @@
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.add(TermsParams.TERMS, "true");
     params.add(TermsParams.TERMS_FIELD, "lowerfilt");
-    //no lower bound
+    //no upper bound, lower bound doesn't exist
     params.add(TermsParams.TERMS_LOWER, "d");
     params.add(TermsParams.TERMS_ROWS, String.valueOf(50));
     SolrRequestHandler handler;
@@ -169,13 +223,14 @@
     assertTrue("terms Size: " + terms.size() + " is not: " + 0, terms.size() 
== 0);
   }
 
-  public void test() throws Exception {
+  public void testLowerExclusive() throws Exception {
     SolrCore core = h.getCore();
     TermsComponent tc = (TermsComponent) core.getSearchComponent("termsComp");
     assertTrue("tc is null and it shouldn't be", tc != null);
-
+    //test where the lower is an actual term
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.add(TermsParams.TERMS, "true");
+    params.add(TermsParams.TERMS_LOWER_INCLUSIVE, "false");
     params.add(TermsParams.TERMS_FIELD, "lowerfilt");
     params.add(TermsParams.TERMS_LOWER, "a");
     params.add(TermsParams.TERMS_UPPER, "b");
@@ -186,54 +241,85 @@
     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();
     terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
-    assertTrue("terms Size: " + terms.size() + " is not: " + 6, terms.size() 
== 6);
+    assertTrue("terms Size: " + terms.size() + " is not: " + 5, terms.size() 
== 5);
     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);
     assertTrue("ab is null and it shouldn't be", terms.get("ab") != null);
+    assertTrue("aaa is null and it shouldn't be", terms.get("aaa") != null);
     assertTrue("abb is null and it shouldn't be", terms.get("abb") != null);
     assertTrue("abc is null and it shouldn't be", terms.get("abc") != null);
-    assertTrue("a is null", terms.get("a") != null);
-    assertTrue("b is not null and it should be", terms.get("b") == null);
+    assertTrue("a is not null", terms.get("a") == null);
+    assertTrue("baa is not null", terms.get("baa") == null);
 
-    params.add(TermsParams.TERMS_UPPER_INCLUSIVE, "true");
+    //test where the lower is not a term
+    params = new ModifiableSolrParams();
+    params.add(TermsParams.TERMS, "true");
+    params.add(TermsParams.TERMS_LOWER_INCLUSIVE, "false");
+    params.add(TermsParams.TERMS_FIELD, "standardfilt");
+    params.add(TermsParams.TERMS_LOWER, "cc");
+    params.add(TermsParams.TERMS_UPPER, "d");
+    params.add(TermsParams.TERMS_ROWS, String.valueOf(50));
+    rsp = new SolrQueryResponse();
+    rsp.add("responseHeader", new SimpleOrderedMap());
+    handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
+    values = rsp.getValues();
+    terms = (NamedList) ((NamedList) values.get("terms")).get("standardfilt");
+    assertTrue("terms Size: " + terms.size() + " is not: " + 2, terms.size() 
== 2);
+  }
+
+
+  public void test() 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");
+    params.add(TermsParams.TERMS_LOWER, "a");
+    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();
     terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
-    assertTrue("terms Size: " + terms.size() + " is not: " + 7, terms.size() 
== 7);
+    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);
     assertTrue("aaa is null and it shouldn't be", terms.get("aaa") != null);
+    assertTrue("ab is null and it shouldn't be", terms.get("ab") != null);
     assertTrue("abb is null and it shouldn't be", terms.get("abb") != null);
     assertTrue("abc is null and it shouldn't be", terms.get("abc") != null);
-    assertTrue("b is null and it shouldn't be", terms.get("b") != null);
     assertTrue("a is null", terms.get("a") != null);
-    assertTrue("baa is not null", terms.get("baa") == null);
+    assertTrue("b is not null and it should be", terms.get("b") == null);
 
-    params.add(TermsParams.TERMS_LOWER_INCLUSIVE, "false");
+    params.add(TermsParams.TERMS_UPPER_INCLUSIVE, "true");
     rsp = new SolrQueryResponse();
     rsp.add("responseHeader", new SimpleOrderedMap());
     handler.handleRequest(new LocalSolrQueryRequest(core, params), rsp);
     values = rsp.getValues();
     terms = (NamedList) ((NamedList) values.get("terms")).get("lowerfilt");
-    assertTrue("terms Size: " + terms.size() + " is not: " + 6, terms.size() 
== 6);
+    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);
     assertTrue("aaa is null and it shouldn't be", terms.get("aaa") != null);
     assertTrue("abb is null and it shouldn't be", terms.get("abb") != null);
     assertTrue("abc is null and it shouldn't be", terms.get("abc") != null);
     assertTrue("b is null and it shouldn't be", terms.get("b") != null);
-    assertTrue("a is not null", terms.get("a") == null);
+    assertTrue("a is null", terms.get("a") != null);
     assertTrue("baa is not null", terms.get("baa") == null);
 
-
-
     params = new ModifiableSolrParams();
     params.add(TermsParams.TERMS, "true");
     params.add(TermsParams.TERMS_FIELD, "lowerfilt");


Reply via email to