Author: yonik
Date: Sun Mar 1 16:29:31 2009
New Revision: 749056
URL: http://svn.apache.org/viewvc?rev=749056&view=rev
Log:
SOLR-764: fix lex sorting for distributed search, change sort string from lex
to index
Modified:
lucene/solr/trunk/src/common/org/apache/solr/common/params/FacetParams.java
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/SolrQuery.java
lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
Modified:
lucene/solr/trunk/src/common/org/apache/solr/common/params/FacetParams.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/common/org/apache/solr/common/params/FacetParams.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
--- lucene/solr/trunk/src/common/org/apache/solr/common/params/FacetParams.java
(original)
+++ lucene/solr/trunk/src/common/org/apache/solr/common/params/FacetParams.java
Sun Mar 1 16:29:31 2009
@@ -89,14 +89,14 @@
/**
* String option: "count" causes facets to be sorted
- * by the count, "lex" results in lexicographical order.
+ * by the count, "index" results in index order.
*/
public static final String FACET_SORT = FACET + ".sort";
public static final String FACET_SORT_COUNT = "count";
public static final String FACET_SORT_COUNT_LEGACY = "true";
- public static final String FACET_SORT_LEX = "lex";
- public static final String FACET_SORT_LEX_LEGACY = "false";
+ public static final String FACET_SORT_INDEX = "index";
+ public static final String FACET_SORT_INDEX_LEGACY = "false";
/**
* Only return constraints of a facet field with the given prefix.
@@ -151,7 +151,7 @@
*/
public static final String FACET_DATE_OTHER = FACET_DATE + ".other";
- /**
+ /**
* An enumeration of the legal values for FACET_DATE_OTHER...
* <ul>
* <li>before = the count of matches before the start date</li>
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/component/FacetComponent.java
Sun Mar 1 16:29:31 2009
@@ -32,6 +32,7 @@
import org.apache.solr.request.SimpleFacets;
import org.apache.lucene.util.OpenBitSet;
import org.apache.solr.search.QueryParsing;
+import org.apache.solr.schema.FieldType;
import org.apache.lucene.queryParser.ParseException;
/**
@@ -269,7 +270,7 @@
for (DistribFieldFacet dff : fi.facets.values()) {
if (dff.limit <= 0) continue; // no need to check these facets for
refinement
- if (dff.minCount <= 1 && dff.sort.equals(FacetParams.FACET_SORT_LEX))
continue;
+ if (dff.minCount <= 1 && dff.sort.equals(FacetParams.FACET_SORT_INDEX))
continue;
dff._toRefine = new List[rb.shards.length];
ShardFacetCount[] counts = dff.getCountSorted();
@@ -373,7 +374,7 @@
if (counts == null || dff.needRefinements) {
counts = dff.getCountSorted();
}
- } else if (dff.sort.equals(FacetParams.FACET_SORT_LEX)) {
+ } else if (dff.sort.equals(FacetParams.FACET_SORT_INDEX)) {
counts = dff.getLexSorted();
} else { // TODO: log error or throw exception?
counts = dff.getLexSorted();
@@ -513,6 +514,7 @@
class FieldFacet extends FacetBase {
String field; // the field to facet on... "myfield" for {!key=foo}myfield
+ FieldType ftype;
int offset;
int limit;
int minCount;
@@ -523,11 +525,12 @@
public FieldFacet(ResponseBuilder rb, String facetStr) {
super(rb, FacetParams.FACET_FIELD, facetStr);
- fillParams(rb.req.getParams(), facetOn);
+ fillParams(rb, rb.req.getParams(), facetOn);
}
- private void fillParams(SolrParams params, String field) {
+ private void fillParams(ResponseBuilder rb, SolrParams params, String field)
{
this.field = field;
+ this.ftype = rb.req.getSchema().getFieldTypeNoEx(this.field);
this.offset = params.getFieldInt(field, FacetParams.FACET_OFFSET, 0);
this.limit = params.getFieldInt(field, FacetParams.FACET_LIMIT, 100);
Integer mincount = params.getFieldInt(field, FacetParams.FACET_MINCOUNT);
@@ -540,11 +543,11 @@
this.minCount = mincount;
this.missing = params.getFieldBool(field, FacetParams.FACET_MISSING,
false);
// default to sorting by count if there is a limit.
- this.sort = params.getFieldParam(field, FacetParams.FACET_SORT, limit>0 ?
FacetParams.FACET_SORT_COUNT : FacetParams.FACET_SORT_LEX);
+ this.sort = params.getFieldParam(field, FacetParams.FACET_SORT, limit>0 ?
FacetParams.FACET_SORT_COUNT : FacetParams.FACET_SORT_INDEX);
if (this.sort.equals(FacetParams.FACET_SORT_COUNT_LEGACY)) {
this.sort = FacetParams.FACET_SORT_COUNT;
- } else if (this.sort.equals(FacetParams.FACET_SORT_LEX_LEGACY)) {
- this.sort = FacetParams.FACET_SORT_LEX;
+ } else if (this.sort.equals(FacetParams.FACET_SORT_INDEX_LEGACY)) {
+ this.sort = FacetParams.FACET_SORT_INDEX;
}
this.prefix = params.getFieldParam(field,FacetParams.FACET_PREFIX);
}
@@ -592,6 +595,7 @@
if (sfc == null) {
sfc = new ShardFacetCount();
sfc.name = name;
+ sfc.indexed = ftype == null ? sfc.name : ftype.toInternal(sfc.name);
sfc.termNum = termNum++;
counts.put(name, sfc);
}
@@ -617,7 +621,7 @@
ShardFacetCount[] arr = counts.values().toArray(new
ShardFacetCount[counts.size()]);
Arrays.sort(arr, new Comparator<ShardFacetCount>() {
public int compare(ShardFacetCount o1, ShardFacetCount o2) {
- return o1.name.compareTo(o2.name);
+ return o1.indexed.compareTo(o2.indexed);
}
});
countSorted = arr;
@@ -630,8 +634,7 @@
public int compare(ShardFacetCount o1, ShardFacetCount o2) {
if (o2.count < o1.count) return -1;
else if (o1.count < o2.count) return 1;
- // TODO: handle tiebreaks for types other than strings
- return o1.name.compareTo(o2.name);
+ return o1.indexed.compareTo(o2.indexed);
}
});
countSorted = arr;
@@ -650,6 +653,7 @@
class ShardFacetCount {
String name;
+ String indexed; // the indexed form of the name... used for comparisons.
long count;
int termNum; // term number starting at 0 (used in bit arrays)
Modified: lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java Sun
Mar 1 16:29:31 2009
@@ -222,7 +222,7 @@
}
boolean missing = params.getFieldBool(field, FacetParams.FACET_MISSING,
false);
// default to sorting if there is a limit.
- String sort = params.getFieldParam(field, FacetParams.FACET_SORT, limit>0
? "count" : "lex");
+ String sort = params.getFieldParam(field, FacetParams.FACET_SORT, limit>0
? FacetParams.FACET_SORT_COUNT : FacetParams.FACET_SORT_INDEX);
String prefix = params.getFieldParam(field,FacetParams.FACET_PREFIX);
Modified:
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/SolrQuery.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/SolrQuery.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
--- lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/SolrQuery.java
(original)
+++ lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/SolrQuery.java Sun
Mar 1 16:29:31 2009
@@ -217,7 +217,7 @@
*
* @return facet sort or default of true. <br />
* true corresponds to
- * {...@link FacetParams#FACET_SORT_COUNT} and <br />false to {...@link
FacetParams#FACET_SORT_LEX}
+ * {...@link FacetParams#FACET_SORT_COUNT} and <br />false to {...@link
FacetParams#FACET_SORT_INDEX}
*
* @deprecated Use {...@link #getFacetSortString()} instead.
*/
@@ -241,11 +241,11 @@
* @param sort sort facets
* @return this
* @deprecated Use {...@link #setFacetSort(String)} instead, true
corresponds to
- * {...@link FacetParams#FACET_SORT_COUNT} and false to {...@link
FacetParams#FACET_SORT_LEX}.
+ * {...@link FacetParams#FACET_SORT_COUNT} and false to {...@link
FacetParams#FACET_SORT_INDEX}.
*/
@Deprecated
public SolrQuery setFacetSort(boolean sort) {
- this.set(FacetParams.FACET_SORT, sort == true ?
FacetParams.FACET_SORT_COUNT : FacetParams.FACET_SORT_LEX);
+ this.set(FacetParams.FACET_SORT, sort == true ?
FacetParams.FACET_SORT_COUNT : FacetParams.FACET_SORT_INDEX);
return this;
}
Modified: lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java
(original)
+++ lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java Sun
Mar 1 16:29:31 2009
@@ -541,7 +541,7 @@
query("q","*:*", "rows",100, "facet","true", "facet.field",t1);
query("q","*:*", "rows",100, "facet","true", "facet.field",t1,
"facet.limit",-1, "facet.sort","count");
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1,
"facet.limit",-1, "facet.sort","lex");
+ query("q","*:*", "rows",100, "facet","true", "facet.field",t1,
"facet.limit",-1, "facet.sort","index");
query("q","*:*", "rows",100, "facet","true",
"facet.field",t1,"facet.limit",1);
query("q","*:*", "rows",100, "facet","true", "facet.query","quick",
"facet.query","all", "facet.query","*:*");
query("q","*:*", "rows",100, "facet","true", "facet.field",t1,
"facet.offset",1);
Modified:
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrQueryTest.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
(original)
+++ lucene/solr/trunk/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
Sun Mar 1 16:29:31 2009
@@ -95,8 +95,8 @@
public void testFacetSort() {
SolrQuery q = new SolrQuery("dog");
assertEquals("count", q.getFacetSortString());
- q.setFacetSort("lex");
- assertEquals("lex", q.getFacetSortString());
+ q.setFacetSort("index");
+ assertEquals("index", q.getFacetSortString());
}
public void testFacetSortLegacy() {
@@ -110,7 +110,7 @@
SolrQuery q = new SolrQuery("foo");
assertEquals(10, q.setFacetLimit(10).getFacetLimit());
assertEquals(10, q.setFacetMinCount(10).getFacetMinCount());
- assertEquals("lex", q.setFacetSort("lex").getFacetSortString());
+ assertEquals("index", q.setFacetSort("index").getFacetSortString());
assertEquals(10, q.setHighlightSnippets(10).getHighlightSnippets());
assertEquals(10, q.setHighlightFragsize(10).getHighlightFragsize());
assertEquals(true,
q.setHighlightRequireFieldMatch(true).getHighlightRequireFieldMatch());
Modified:
lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=749056&r1=749055&r2=749056&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
(original)
+++ lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
Sun Mar 1 16:29:31 2009
@@ -457,7 +457,7 @@
,"facet.mincount","1"
,"facet.offset","0"
,"facet.limit","6"
- ,"facet.sort","lex"
+ ,"facet.sort","index"
)
,"*[count(//l...@name='facet_fields']/lst/int)=6]"
,pre+"/int[...@name='A'][.='1']"
@@ -476,7 +476,7 @@
,"facet.mincount","1"
,"facet.offset","3"
,"facet.limit","2"
- ,"facet.sort","lex"
+ ,"facet.sort","index"
)
,"*[count(//l...@name='facet_fields']/lst/int)=2]"
,pre+"/int[...@name='E'][.='3']"
@@ -491,7 +491,7 @@
,"facet.mincount","2"
,"facet.offset","1"
,"facet.limit","2"
- ,"facet.sort","lex"
+ ,"facet.sort","index"
)
,"*[count(//l...@name='facet_fields']/lst/int)=1]"
,pre+"/int[...@name='G'][.='5']"
@@ -555,7 +555,7 @@
,"facet.mincount","0"
,"facet.offset","0"
,"facet.limit","100"
- ,"facet.sort","lex"
+ ,"facet.sort","index"
,"facet.prefix","B"
)
,"*[count(//l...@name='facet_fields']/lst/int)=3]"
@@ -573,7 +573,7 @@
,"facet.mincount","0"
,"facet.offset","0"
,"facet.limit","100"
- ,"facet.sort","lex"
+ ,"facet.sort","index"
,"facet.prefix","B"
)
,"*[count(//l...@name='facet_fields']/lst/int)=3]"