You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by gs...@apache.org on 2008/12/06 15:09:42 UTC
svn commit: r723985 - in /lucene/solr/trunk: CHANGES.txt
src/java/org/apache/solr/common/params/TermsParams.java
src/java/org/apache/solr/handler/component/TermsComponent.java
src/test/org/apache/solr/handler/component/TermsComponentTest.java
Author: gsingers
Date: Sat Dec 6 06:09:42 2008
New Revision: 723985
URL: http://svn.apache.org/viewvc?rev=723985&view=rev
Log:
SOLR-877: added mincount and maxcount options
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/java/org/apache/solr/common/params/TermsParams.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java (contents, props changed)
lucene/solr/trunk/src/test/org/apache/solr/handler/component/TermsComponentTest.java
Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=723985&r1=723984&r2=723985&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Sat Dec 6 06:09:42 2008
@@ -93,6 +93,7 @@
18. SOLR-877: Added TermsComponent for accessing Lucene's TermEnum capabilities.
Useful for auto suggest and possibly distributed search. Not distributed search compliant. (gsingers)
+ - Added mincount and maxcount options (Khee Chin via gsingers)
19. SOLR-538: Add maxChars attribute for copyField function so that the length limit for destination
can be specified.
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=723985&r1=723984&r2=723985&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 Dec 6 06:09:42 2008
@@ -67,4 +67,14 @@
public static final String TERMS_ROWS = TERMS_PREFIX + "rows";
public static final String TERMS_PREFIX_STR = TERMS_PREFIX + "prefix";
+
+ /**
+ * Optional. The minimum value of docFreq to be returned. 1 by default
+ */
+ public static final String TERMS_MINCOUNT = TERMS_PREFIX + "mincount";
+ /**
+ * Optional. The maximum value of docFreq to be returned. -1 by default means no boundary
+ */
+ public static final String TERMS_MAXCOUNT = TERMS_PREFIX + "maxcount";
}
+
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=723985&r1=723984&r2=723985&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 Dec 6 06:09:42 2008
@@ -34,6 +34,7 @@
* See Lucene's TermEnum class
*/
public class TermsComponent extends SearchComponent {
+ public static final int UNLIMITED_MAX_COUNT = -1;
public void process(ResponseBuilder rb) throws IOException {
@@ -45,13 +46,14 @@
NamedList terms = new NamedList();
rb.rsp.add("terms", terms);
int rows = params.getInt(TermsParams.TERMS_ROWS, params.getInt(CommonParams.ROWS, 10));
- if (rows < 0){
+ 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);
+ int freqmin = params.getInt(TermsParams.TERMS_MINCOUNT, 1); // initialize freqmin
+ int freqmax = params.getInt(TermsParams.TERMS_MAXCOUNT, UNLIMITED_MAX_COUNT); // initialize freqmax
String prefix = params.get(TermsParams.TERMS_PREFIX_STR);
for (int j = 0; j < fields.length; j++) {
String field = fields[j];
@@ -77,17 +79,19 @@
(upperIncl == false && upperCmp < 0))
&& (prefix == null || theText.startsWith(prefix))
) {
- fieldTerms.add(theText, termEnum.docFreq());
+ int docFreq = termEnum.docFreq();
+ if (docFreq >= freqmin && (freqmax == UNLIMITED_MAX_COUNT || (docFreq <= freqmax))) {
+ fieldTerms.add(theText, docFreq);
+ i++;
+ }
} else {//we're done
break;
}
- i++;
}
while (i < rows && termEnum.next());
}
termEnum.close();
}
-
} else {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No terms.fl parameter specified");
}
@@ -99,7 +103,7 @@
}
public String getVersion() {
- return "$Revision$";
+ return "$Revision:$";
}
public String getSourceId() {
@@ -107,7 +111,7 @@
}
public String getSource() {
- return "$Revision:$";
+ return "$URL:$";
}
public String getDescription() {
Propchange: lucene/solr/trunk/src/java/org/apache/solr/handler/component/TermsComponent.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
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=723985&r1=723984&r2=723985&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 Dec 6 06:09:42 2008
@@ -16,7 +16,6 @@
* limitations under the License.
*/
-import org.mortbay.log.Log;
import org.apache.solr.util.AbstractSolrTestCase;
import org.apache.solr.core.SolrCore;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -27,8 +26,6 @@
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryResponse;
-import java.util.Iterator;
-
/**
*
@@ -57,6 +54,14 @@
assertU(adoc("id", "8", "lowerfilt", "baa", "standardfilt", "cccc"));
assertU(adoc("id", "9", "lowerfilt", "bbb", "standardfilt", "ccccc"));
+ assertU(adoc("id", "10", "standardfilt", "ddddd"));
+ assertU(adoc("id", "11", "standardfilt", "ddddd"));
+ assertU(adoc("id", "12", "standardfilt", "ddddd"));
+ assertU(adoc("id", "13", "standardfilt", "ddddd"));
+ assertU(adoc("id", "14", "standardfilt", "d"));
+ assertU(adoc("id", "15", "standardfilt", "d"));
+ assertU(adoc("id", "16", "standardfilt", "d"));
+
assertU("commit", commit());
}
@@ -339,4 +344,48 @@
assertTrue("b is null and it shouldn't be", terms.get("b") == null);
assertTrue("baa is not null", terms.get("baa") == null);
}
+
+
+ public void testMinMaxFreq() throws Exception {
+ SolrCore core = h.getCore();
+ TermsComponent tc = (TermsComponent) core.getSearchComponent("termsComp");
+ assertTrue("tc is null and it shouldn't be", tc != null);
+ SolrRequestHandler handler;
+ SolrQueryResponse rsp;
+ NamedList values;
+ NamedList terms;
+ handler = core.getRequestHandler("/terms");
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add(TermsParams.TERMS, "true");
+ params.add(TermsParams.TERMS_FIELD, "lowerfilt");
+ params.add(TermsParams.TERMS_ROWS, String.valueOf(50));
+ // Tests TERMS_LOWER = "a" with freqmin = 2, freqmax = -1, terms.size() = 1
+ params.add(TermsParams.TERMS_LOWER, "a");
+ params.add(TermsParams.TERMS_MINCOUNT,String.valueOf(2));
+ params.add(TermsParams.TERMS_MAXCOUNT,String.valueOf(TermsComponent.UNLIMITED_MAX_COUNT));
+ 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);
+
+ params = new ModifiableSolrParams();
+ params.add(TermsParams.TERMS, "true");
+ params.add(TermsParams.TERMS_FIELD, "standardfilt");
+ params.add(TermsParams.TERMS_ROWS, String.valueOf(50));
+ // Tests TERMS_LOWER = "a" with freqmin = 2, freqmax = -1, terms.size() = 1
+ params.add(TermsParams.TERMS_LOWER, "d");
+ params.add(TermsParams.TERMS_MINCOUNT,String.valueOf(2));
+ params.add(TermsParams.TERMS_MAXCOUNT,String.valueOf(3));
+ 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: " + 1, terms.size() == 1);
+ Integer d = (Integer) terms.get("d");
+ assertTrue(d + " does not equal: " + 3, d == 3);
+
+ }
}