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 2013/01/27 21:01:54 UTC
svn commit: r1439164 [3/3] - in /lucene/dev/branches/lucene4547: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/codecs/compressing/
lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/java/org/apache/lucene/util/ lucene/core/...
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/schema/TrieField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/schema/TrieField.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/schema/TrieField.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/schema/TrieField.java Sun Jan 27 20:01:52 2013
@@ -29,8 +29,6 @@ import org.apache.lucene.document.FieldT
import org.apache.lucene.document.FloatField;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.LongField;
-import org.apache.lucene.index.GeneralField;
-import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.StorableField;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.queries.function.valuesource.DoubleFieldSource;
@@ -48,7 +46,6 @@ import org.apache.solr.analysis.TrieToke
import org.apache.solr.common.SolrException;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
-import org.apache.solr.search.function.*;
/**
* Provides field types to support for Lucene's {@link
@@ -311,19 +308,19 @@ public class TrieField extends Primitive
String s = val.toString();
switch (type) {
case INTEGER:
- NumericUtils.intToPrefixCoded(Integer.parseInt(s), 0, result);
+ NumericUtils.intToPrefixCodedBytes(Integer.parseInt(s), 0, result);
break;
case FLOAT:
- NumericUtils.intToPrefixCoded(NumericUtils.floatToSortableInt(Float.parseFloat(s)), 0, result);
+ NumericUtils.intToPrefixCodedBytes(NumericUtils.floatToSortableInt(Float.parseFloat(s)), 0, result);
break;
case LONG:
- NumericUtils.longToPrefixCoded(Long.parseLong(s), 0, result);
+ NumericUtils.longToPrefixCodedBytes(Long.parseLong(s), 0, result);
break;
case DOUBLE:
- NumericUtils.longToPrefixCoded(NumericUtils.doubleToSortableLong(Double.parseDouble(s)), 0, result);
+ NumericUtils.longToPrefixCodedBytes(NumericUtils.doubleToSortableLong(Double.parseDouble(s)), 0, result);
break;
case DATE:
- NumericUtils.longToPrefixCoded(dateField.parseMath(null, s).getTime(), 0, result);
+ NumericUtils.longToPrefixCodedBytes(dateField.parseMath(null, s).getTime(), 0, result);
break;
default:
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type for trie field: " + type);
@@ -419,17 +416,17 @@ public class TrieField extends Primitive
if (val != null) {
switch (type) {
case INTEGER:
- NumericUtils.intToPrefixCoded(val.intValue(), 0, bytes);
+ NumericUtils.intToPrefixCodedBytes(val.intValue(), 0, bytes);
break;
case FLOAT:
- NumericUtils.intToPrefixCoded(NumericUtils.floatToSortableInt(val.floatValue()), 0, bytes);
+ NumericUtils.intToPrefixCodedBytes(NumericUtils.floatToSortableInt(val.floatValue()), 0, bytes);
break;
case LONG: //fallthrough!
case DATE:
- NumericUtils.longToPrefixCoded(val.longValue(), 0, bytes);
+ NumericUtils.longToPrefixCodedBytes(val.longValue(), 0, bytes);
break;
case DOUBLE:
- NumericUtils.longToPrefixCoded(NumericUtils.doubleToSortableLong(val.doubleValue()), 0, bytes);
+ NumericUtils.longToPrefixCodedBytes(NumericUtils.doubleToSortableLong(val.doubleValue()), 0, bytes);
break;
default:
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type for trie field: " + f.name());
@@ -441,7 +438,7 @@ public class TrieField extends Primitive
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Invalid field contents: "+f.name());
switch (type) {
case INTEGER:
- NumericUtils.intToPrefixCoded(toInt(bytesRef.bytes, bytesRef.offset), 0, bytes);
+ NumericUtils.intToPrefixCodedBytes(toInt(bytesRef.bytes, bytesRef.offset), 0, bytes);
break;
case FLOAT: {
// WARNING: Code Duplication! Keep in sync with o.a.l.util.NumericUtils!
@@ -449,12 +446,12 @@ public class TrieField extends Primitive
// code in next 2 lines is identical to: int v = NumericUtils.floatToSortableInt(Float.intBitsToFloat(toInt(arr)));
int v = toInt(bytesRef.bytes, bytesRef.offset);
if (v<0) v ^= 0x7fffffff;
- NumericUtils.intToPrefixCoded(v, 0, bytes);
+ NumericUtils.intToPrefixCodedBytes(v, 0, bytes);
break;
}
case LONG: //fallthrough!
case DATE:
- NumericUtils.longToPrefixCoded(toLong(bytesRef.bytes, bytesRef.offset), 0, bytes);
+ NumericUtils.longToPrefixCodedBytes(toLong(bytesRef.bytes, bytesRef.offset), 0, bytes);
break;
case DOUBLE: {
// WARNING: Code Duplication! Keep in sync with o.a.l.util.NumericUtils!
@@ -462,7 +459,7 @@ public class TrieField extends Primitive
// code in next 2 lines is identical to: long v = NumericUtils.doubleToSortableLong(Double.longBitsToDouble(toLong(arr)));
long v = toLong(bytesRef.bytes, bytesRef.offset);
if (v<0) v ^= 0x7fffffffffffffffL;
- NumericUtils.longToPrefixCoded(v, 0, bytes);
+ NumericUtils.longToPrefixCodedBytes(v, 0, bytes);
break;
}
default:
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java Sun Jan 27 20:01:52 2013
@@ -917,10 +917,11 @@ public class UpdateLog implements Plugin
reader = oldLog.getReverseReader();
while (numUpdates < numRecordsToKeep) {
- Object o = reader.next();
- if (o==null) break;
+ Object o = null;
try {
-
+ o = reader.next();
+ if (o==null) break;
+
// should currently be a List<Oper,Ver,Doc/Id>
List entry = (List)o;
Modified: lucene/dev/branches/lucene4547/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionProcessorTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionProcessorTest.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionProcessorTest.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionProcessorTest.java Sun Jan 27 20:01:52 2013
@@ -19,10 +19,11 @@ package org.apache.solr.cloud;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.reset;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.reset;
import static org.easymock.EasyMock.verify;
import java.util.ArrayList;
@@ -36,6 +37,8 @@ import java.util.Queue;
import java.util.Set;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.SolrResponse;
+import org.apache.solr.cloud.DistributedQueue.QueueEvent;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -43,11 +46,13 @@ import org.apache.solr.common.cloud.ZkSt
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.handler.component.ShardHandler;
import org.apache.solr.handler.component.ShardRequest;
import org.apache.solr.handler.component.ShardResponse;
import org.easymock.Capture;
+import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.eclipse.jetty.util.BlockingArrayQueue;
import org.junit.After;
@@ -71,12 +76,12 @@ public class OverseerCollectionProcessor
private OverseerCollectionProcessorToBeTested underTest;
private Thread thread;
- private Queue<byte[]> queue = new BlockingArrayQueue<byte[]>();
+ private Queue<QueueEvent> queue = new BlockingArrayQueue<QueueEvent>();
private class OverseerCollectionProcessorToBeTested extends
OverseerCollectionProcessor {
- private boolean lastProcessMessageResult = true;
+ private SolrResponse lastProcessMessageResult;
public OverseerCollectionProcessorToBeTested(ZkStateReader zkStateReader,
String myId, ShardHandler shardHandler, String adminPath,
@@ -85,7 +90,7 @@ public class OverseerCollectionProcessor
}
@Override
- protected boolean processMessage(ZkNodeProps message, String operation) {
+ protected SolrResponse processMessage(ZkNodeProps message, String operation) {
lastProcessMessageResult = super.processMessage(message, operation);
return lastProcessMessageResult;
}
@@ -147,11 +152,12 @@ public class OverseerCollectionProcessor
}
}).anyTimes();
- workQueueMock.remove();
+ workQueueMock.remove(anyObject(QueueEvent.class));
expectLastCall().andAnswer(new IAnswer<Object>() {
@Override
public Object answer() throws Throwable {
- return queue.poll();
+ queue.remove((QueueEvent)EasyMock.getCurrentArguments()[0]);
+ return null;
}
}).anyTimes();
@@ -273,7 +279,8 @@ public class OverseerCollectionProcessor
OverseerCollectionProcessor.MAX_SHARDS_PER_NODE,
maxShardsPerNode.toString());
}
- queue.add(ZkStateReader.toJSON(props));
+ QueueEvent qe = new QueueEvent("id", ZkStateReader.toJSON(props), null);
+ queue.add(qe);
}
protected void verifySubmitCaptures(List<SubmitCapture> submitCaptures,
@@ -443,7 +450,9 @@ public class OverseerCollectionProcessor
waitForEmptyQueue(10000);
- assertEquals(collectionExceptedToBeCreated, underTest.lastProcessMessageResult);
+ if (collectionExceptedToBeCreated) {
+ assertNotNull(underTest.lastProcessMessageResult.getResponse().toString(), underTest.lastProcessMessageResult);
+ }
verify(shardHandlerMock);
if (collectionExceptedToBeCreated) {
Modified: lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrQuery.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrQuery.java (original)
+++ lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrQuery.java Sun Jan 27 20:01:52 2013
@@ -25,7 +25,10 @@ import org.apache.solr.common.params.Sta
import org.apache.solr.common.params.TermsParams;
import org.apache.solr.common.util.DateUtil;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
+import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
@@ -44,6 +47,9 @@ public class SolrQuery extends Modifiabl
return (this == asc) ? desc : asc;
}
}
+
+ /** Maintains a map of current sorts */
+ private List<SortClause> sortClauses;
public SolrQuery() {
super();
@@ -529,38 +535,230 @@ public class SolrQuery extends Modifiabl
return this.get(HighlightParams.SIMPLE_POST, "");
}
+ /**
+ * Replaces the sort string with a single sort field.
+ * @deprecated Use {@link #setSort(SortClause)} instead, which is part
+ * of an api handling a wider range of sort specifications.
+ */
+ @Deprecated
public SolrQuery setSortField(String field, ORDER order) {
this.remove(CommonParams.SORT);
addValueToParam(CommonParams.SORT, toSortString(field, order));
return this;
}
+ /**
+ * Adds a sort field to the end of the sort string.
+ * @deprecated Use {@link #addSort(SortClause)} instead, which is part
+ * of an api handling a wider range of sort specifications.
+ */
+ @Deprecated
public SolrQuery addSortField(String field, ORDER order) {
return addValueToParam(CommonParams.SORT, toSortString(field, order));
}
+ /**
+ * Removes a sort field to the end of the sort string.
+ * @deprecated Use {@link #removeSort(SortClause)} instead, which is part
+ * of an api handling a wider range of sort specifications.
+ */
+ @Deprecated
public SolrQuery removeSortField(String field, ORDER order) {
- String s = this.get(CommonParams.SORT);
- String removeSort = toSortString(field, order);
- if (s != null) {
- String[] sorts = s.split(",");
- s = join(sorts, ", ", removeSort);
+ String[] sorts = getSortFields();
+ if (sorts != null) {
+ String removeSort = toSortString(field, order);
+ String s = join(sorts, ",", removeSort);
if (s.length()==0) s=null;
this.set(CommonParams.SORT, s);
}
return this;
}
+ /**
+ * Gets an array of sort specifications.
+ * @deprecated Use {@link #getSorts()} instead, which is part
+ * of an api handling a wider range of sort specifications.
+ */
+ @Deprecated
public String[] getSortFields() {
String s = getSortField();
if (s==null) return null;
- return s.split(",");
+ return s.trim().split(", *");
}
+ /**
+ * Gets the raw sort field, as it will be sent to Solr.
+ * <p>
+ * The returned sort field will always contain a serialized version
+ * of the sort string built using {@link #setSort(SortClause)},
+ * {@link #addSort(SortClause)}, {@link #addOrUpdateSort(SortClause)},
+ * {@link #removeSort(SortClause)}, {@link #clearSorts()} and
+ * {@link #setSorts(List)}.
+ */
public String getSortField() {
return this.get(CommonParams.SORT);
}
+ /**
+ * Clears current sort information.
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery clearSorts() {
+ sortClauses = null;
+ serializeSorts();
+ return this;
+ }
+
+ /**
+ * Replaces the current sort information.
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery setSorts(List<SortClause> value) {
+ sortClauses = new ArrayList<SortClause>(value);
+ serializeSorts();
+ return this;
+ }
+
+ /**
+ * Gets an a list of current sort clauses.
+ *
+ * @return an immutable list of current sort clauses
+ * @since 4.2
+ */
+ public List<SortClause> getSorts() {
+ if (sortClauses == null) return Collections.emptyList();
+ else return Collections.unmodifiableList(sortClauses);
+ }
+
+ /**
+ * Replaces the current sort information with a single sort clause
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery setSort(String field, ORDER order) {
+ return setSort(new SortClause(field, order));
+ }
+
+ /**
+ * Replaces the current sort information with a single sort clause
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery setSort(SortClause sortClause) {
+ clearSorts();
+ return addSort(sortClause);
+ }
+
+ /**
+ * Adds a single sort clause to the end of the current sort information.
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery addSort(String field, ORDER order) {
+ return addSort(new SortClause(field, order));
+ }
+
+ /**
+ * Adds a single sort clause to the end of the query.
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery addSort(SortClause sortClause) {
+ if (sortClauses == null) sortClauses = new ArrayList<SortClause>();
+ sortClauses.add(sortClause);
+ serializeSorts();
+ return this;
+ }
+
+ /**
+ * Updates or adds a single sort clause to the query.
+ * If the field is already used for sorting, the order
+ * of the existing field is modified; otherwise, it is
+ * added to the end.
+ * <p>
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery addOrUpdateSort(String field, ORDER order) {
+ return addOrUpdateSort(new SortClause(field, order));
+ }
+
+ /**
+ * Updates or adds a single sort field specification to the current sort
+ * information. If the sort field already exist in the sort information map,
+ * it's position is unchanged and the sort order is set; if it does not exist,
+ * it is appended at the end with the specified order..
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery addOrUpdateSort(SortClause sortClause) {
+ if (sortClauses != null) {
+ for (int index=0 ; index<sortClauses.size() ; index++) {
+ SortClause existing = sortClauses.get(index);
+ if (existing.getItem().equals(sortClause.getItem())) {
+ sortClauses.set(index, sortClause);
+ serializeSorts();
+ return this;
+ }
+ }
+ }
+ return addSort(sortClause);
+ }
+
+ /**
+ * Removes a single sort field from the current sort information.
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery removeSort(SortClause sortClause) {
+ return removeSort(sortClause.getItem());
+ }
+
+ /**
+ * Removes a single sort field from the current sort information.
+ *
+ * @return the modified SolrQuery object, for easy chaining
+ * @since 4.2
+ */
+ public SolrQuery removeSort(String itemName) {
+ if (sortClauses != null) {
+ for (SortClause existing : sortClauses) {
+ if (existing.getItem().equals(itemName)) {
+ sortClauses.remove(existing);
+ if (sortClauses.isEmpty()) sortClauses = null;
+ serializeSorts();
+ break;
+ }
+ }
+ }
+ return this;
+ }
+
+ private void serializeSorts() {
+ if (sortClauses == null || sortClauses.isEmpty()) {
+ remove(CommonParams.SORT);
+ } else {
+ StringBuilder sb = new StringBuilder();
+ for (SortClause sortClause : sortClauses) {
+ if (sb.length() > 0) sb.append(",");
+ sb.append(sortClause.getItem());
+ sb.append(" ");
+ sb.append(sortClause.getOrder());
+ }
+ set(CommonParams.SORT, sb.toString());
+ }
+ }
+
public void setGetFieldStatistics( boolean v )
{
this.set( StatsParams.STATS, v );
@@ -823,13 +1021,126 @@ public class SolrQuery extends Modifiabl
private String join(String[] vals, String sep, String removeVal) {
StringBuilder sb = new StringBuilder();
for (int i=0; i<vals.length; i++) {
- if (removeVal==null || !vals[i].equals(removeVal)) {
- sb.append(vals[i]);
- if (i<vals.length-1) {
+ if (!vals[i].equals(removeVal)) {
+ if (sb.length() > 0) {
sb.append(sep);
}
+ sb.append(vals[i]);
}
}
return sb.toString().trim();
}
+
+ /**
+ * A single sort clause, encapsulating what to sort and the sort order.
+ * <p>
+ * The item specified can be "anything sortable" by solr; some examples
+ * include a simple field name, the constant string {@code score}, and functions
+ * such as {@code sum(x_f, y_f)}.
+ * <p>
+ * A SortClause can be created through different mechanisms:
+ * <PRE><code>
+ * new SortClause("product", SolrQuery.ORDER.asc);
+ * new SortClause("product", "asc");
+ * SortClause.asc("product");
+ * SortClause.desc("product");
+ * </code></PRE>
+ */
+ public static class SortClause implements java.io.Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private final String item;
+ private final ORDER order;
+
+ /**
+ * Creates a SortClause based on item and order
+ * @param item item to sort on
+ * @param order direction to sort
+ */
+ public SortClause(String item, ORDER order) {
+ this.item = item;
+ this.order = order;
+ }
+
+ /**
+ * Creates a SortClause based on item and order
+ * @param item item to sort on
+ * @param order string value for direction to sort
+ */
+ public SortClause(String item, String order) {
+ this(item, ORDER.valueOf(order));
+ }
+
+ /**
+ * Creates an ascending SortClause for an item
+ * @param item item to sort on
+ */
+ public static SortClause create (String item, ORDER order) {
+ return new SortClause(item, order);
+ }
+
+ /**
+ * Creates a SortClause based on item and order
+ * @param item item to sort on
+ * @param order string value for direction to sort
+ */
+ public static SortClause create(String item, String order) {
+ return new SortClause(item, ORDER.valueOf(order));
+ }
+
+ /**
+ * Creates an ascending SortClause for an item
+ * @param item item to sort on
+ */
+ public static SortClause asc (String item) {
+ return new SortClause(item, ORDER.asc);
+ }
+
+ /**
+ * Creates a decending SortClause for an item
+ * @param item item to sort on
+ */
+ public static SortClause desc (String item) {
+ return new SortClause(item, ORDER.desc);
+ }
+
+ /**
+ * Gets the item to sort, typically a function or a fieldname
+ * @return item to sort
+ */
+ public String getItem() {
+ return item;
+ }
+
+ /**
+ * Gets the order to sort
+ * @return order to sort
+ */
+ public ORDER getOrder() {
+ return order;
+ }
+
+ public boolean equals(Object other){
+ if (this == other) return true;
+ if (!(other instanceof SortClause)) return false;
+ final SortClause that = (SortClause) other;
+ return this.getItem().equals(that.getItem()) && this.getOrder().equals(that.getOrder());
+ }
+
+ public int hashCode(){
+ return this.getItem().hashCode();
+ }
+
+ /**
+ * Gets a human readable description of the sort clause.
+ * <p>
+ * The returned string is not suitable for passing to Solr,
+ * but may be useful in debug output and the like.
+ * @return a description of the current sort clause
+ */
+ public String toString() {
+ return "[" + getClass().getSimpleName() + ": item=" + getItem() + "; order=" + getOrder() + "]";
+ }
+ }
}
Modified: lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrResponse.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrResponse.java (original)
+++ lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/client/solrj/SolrResponse.java Sun Jan 27 20:01:52 2013
@@ -17,19 +17,47 @@
package org.apache.solr.client.solrj;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.util.NamedList;
/**
*
- *
+ *
* @since solr 1.3
*/
-public abstract class SolrResponse implements Serializable
-{
+public abstract class SolrResponse implements Serializable {
public abstract long getElapsedTime();
- public abstract void setResponse( NamedList<Object> rsp );
+
+ public abstract void setResponse(NamedList<Object> rsp);
+
public abstract NamedList<Object> getResponse();
+
+ public static byte[] serializable(SolrResponse response) {
+ try {
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ ObjectOutputStream outputStream = new ObjectOutputStream(byteStream);
+ outputStream.writeObject(response);
+ return byteStream.toByteArray();
+ } catch (Exception e) {
+ throw new SolrException(ErrorCode.SERVER_ERROR, e);
+ }
+ }
+
+ public static SolrResponse deserialize(byte[] bytes) {
+ try {
+ ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
+ ObjectInputStream inputStream = new ObjectInputStream(byteStream);
+ return (SolrResponse) inputStream.readObject();
+ } catch (Exception e) {
+ throw new SolrException(ErrorCode.SERVER_ERROR, e);
+ }
+ }
}
Modified: lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java (original)
+++ lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java Sun Jan 27 20:01:52 2013
@@ -108,7 +108,13 @@ public class SolrDocument implements Map
/**
* This will add a field to the document. If fields already exist with this
* name it will append value to the collection. If the value is Collection,
- * each value will be added independently.
+ * each value will be added independently.
+ *
+ * The class type of value and the name parameter should match schema.xml.
+ * schema.xml can be found in conf directory under the solr home by default.
+ *
+ * @param name Name of the field, should match one of the field names defined under "fields" tag in schema.xml.
+ * @param value Value of the field, should be of same class type as defined by "type" attribute of the corresponding field in schema.xml.
*/
@SuppressWarnings("unchecked")
public void addField(String name, Object value)
Modified: lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java (original)
+++ lucene/dev/branches/lucene4547/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java Sun Jan 27 20:01:52 2013
@@ -63,9 +63,12 @@ public class SolrInputDocument implement
/**
* Add a field with implied null value for boost.
*
+ * The class type of value and the name parameter should match schema.xml.
+ * schema.xml can be found in conf directory under the solr home by default.
+ *
+ * @param name Name of the field, should match one of the field names defined under "fields" tag in schema.xml.
+ * @param value Value of the field, should be of same class type as defined by "type" attribute of the corresponding field in schema.xml.
* @see #addField(String, Object, float)
- * @param name name of the field to add
- * @param value value of the field
*/
public void addField(String name, Object value)
{
@@ -132,8 +135,11 @@ public class SolrInputDocument implement
* field, with the new boost. If the value is a collection, then each of its
* values will be added to the field.
*
- * @param name Name of the field to add
- * @param value Value of the field
+ * The class type of value and the name parameter should match schema.xml.
+ * schema.xml can be found in conf directory under the solr home by default.
+ *
+ * @param name Name of the field, should match one of the field names defined under "fields" tag in schema.xml.
+ * @param value Value of the field, should be of same class type as defined by "type" attribute of the corresponding field in schema.xml.
* @param boost Boost value for the field
*/
public void addField(String name, Object value, float boost )
Modified: lucene/dev/branches/lucene4547/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java (original)
+++ lucene/dev/branches/lucene4547/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java Sun Jan 27 20:01:52 2013
@@ -18,11 +18,17 @@
package org.apache.solr.client.solrj;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.client.solrj.SolrQuery.SortClause;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.FacetParams;
import junit.framework.Assert;
import org.apache.solr.common.util.DateUtil;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
@@ -98,6 +104,169 @@ public class SolrQueryTest extends Lucen
// System.out.println(q);
}
+ /*
+ * Verifies that the old (deprecated) sort methods
+ * allows mix-and-match between the raw field and
+ * the itemized apis.
+ */
+ public void testSortFieldRawStringAndMethods() {
+ SolrQuery q = new SolrQuery("dog");
+ q.set("sort", "price asc,date desc,qty desc");
+ q.removeSortField("date", SolrQuery.ORDER.desc);
+ Assert.assertEquals(2, q.getSortFields().length);
+ q.set("sort", "price asc, date desc, qty desc");
+ q.removeSortField("date", SolrQuery.ORDER.desc);
+ Assert.assertEquals(2, q.getSortFields().length);
+ }
+
+ /*
+ * Verifies that you can use removeSortField() twice, which
+ * did not work in 4.0
+ */
+ public void testSortFieldRemoveAfterRemove() {
+ SolrQuery q = new SolrQuery("dog");
+ q.addSortField("price", SolrQuery.ORDER.asc);
+ q.addSortField("date", SolrQuery.ORDER.desc);
+ q.addSortField("qty", SolrQuery.ORDER.desc);
+ q.removeSortField("date", SolrQuery.ORDER.desc);
+ Assert.assertEquals(2, q.getSortFields().length);
+ q.removeSortField("qty", SolrQuery.ORDER.desc);
+ Assert.assertEquals(1, q.getSortFields().length);
+ }
+
+ /*
+ * Verifies that you can remove the last sort field, which
+ * did not work in 4.0
+ */
+ public void testSortFieldRemoveLast() {
+ SolrQuery q = new SolrQuery("dog");
+ q.addSortField("date", SolrQuery.ORDER.desc);
+ q.addSortField("qty", SolrQuery.ORDER.desc);
+ q.removeSortField("qty", SolrQuery.ORDER.desc);
+ Assert.assertEquals("date desc", q.getSortField());
+ }
+
+ /*
+ * Verifies that getSort() returns an immutable map,
+ * for both empty and non-empty situations
+ */
+ public void testGetSortImmutable() {
+ SolrQuery q = new SolrQuery("dog");
+
+ try {
+ q.getSorts().add(new SortClause("price", SolrQuery.ORDER.asc));
+ fail("The returned (empty) map should be immutable; put() should fail!");
+ } catch (UnsupportedOperationException uoe) {
+ // pass
+ }
+
+ q.addSort("qty", SolrQuery.ORDER.desc);
+ try {
+ q.getSorts().add(new SortClause("price", SolrQuery.ORDER.asc));
+ fail("The returned (non-empty) map should be immutable; put() should fail!");
+ } catch (UnsupportedOperationException uoe) {
+ // pass
+ }
+
+ // Should work even when setSorts passes an Immutable List
+ q.setSorts(Arrays.asList(new SortClause("price", SolrQuery.ORDER.asc)));
+ q.addSort(new SortClause("price", SolrQuery.ORDER.asc));
+ }
+
+ public void testSortClause() {
+ new SolrQuery.SortClause("rating", SolrQuery.ORDER.desc);
+ new SolrQuery.SortClause("rating", SolrQuery.ORDER.valueOf("desc"));
+ new SolrQuery.SortClause("rating", SolrQuery.ORDER.valueOf("desc"));
+ SolrQuery.SortClause.create("rating", SolrQuery.ORDER.desc);
+ SolrQuery.SortClause.create("rating", SolrQuery.ORDER.desc);
+ SolrQuery.SortClause.create("rating", SolrQuery.ORDER.desc);
+
+ SolrQuery.SortClause sc1a = SolrQuery.SortClause.asc("sc1");
+ SolrQuery.SortClause sc1b = SolrQuery.SortClause.asc("sc1");
+ Assert.assertEquals(sc1a, sc1b);
+ Assert.assertEquals(sc1a.hashCode(), sc1b.hashCode());
+
+ SolrQuery.SortClause sc2a = SolrQuery.SortClause.asc("sc2");
+ SolrQuery.SortClause sc2b = SolrQuery.SortClause.desc("sc2");
+ Assert.assertFalse(sc2a.equals(sc2b));
+
+ SolrQuery.SortClause sc3a = SolrQuery.SortClause.asc("sc2");
+ SolrQuery.SortClause sc3b = SolrQuery.SortClause.asc("not sc2");
+ Assert.assertFalse(sc3a.equals(sc3b));
+ }
+
+ /*
+ * Verifies the symbolic sort operations
+ */
+ public void testSort() throws IOException {
+
+ SolrQuery q = new SolrQuery("dog");
+
+ // Simple adds
+ q.addSort("price", SolrQuery.ORDER.asc);
+ q.addSort("date", SolrQuery.ORDER.desc);
+ q.addSort("qty", SolrQuery.ORDER.desc);
+ Assert.assertEquals(3, q.getSorts().size());
+ Assert.assertEquals("price asc,date desc,qty desc", q.get(CommonParams.SORT));
+
+ // Remove one (middle)
+ q.removeSort("date");
+ Assert.assertEquals(2, q.getSorts().size());
+ Assert.assertEquals("price asc,qty desc", q.get(CommonParams.SORT));
+
+ // Remove remaining (last, first)
+ q.removeSort("price");
+ q.removeSort("qty");
+ Assert.assertTrue(q.getSorts().isEmpty());
+ Assert.assertNull(q.get(CommonParams.SORT));
+
+ // Clear sort
+ q.addSort("price", SolrQuery.ORDER.asc);
+ q.clearSorts();
+ Assert.assertTrue(q.getSorts().isEmpty());
+ Assert.assertNull(q.get(CommonParams.SORT));
+
+ // Add vs update
+ q.clearSorts();
+ q.addSort("1", SolrQuery.ORDER.asc);
+ q.addSort("2", SolrQuery.ORDER.asc);
+ q.addSort("3", SolrQuery.ORDER.asc);
+ q.addOrUpdateSort("2", SolrQuery.ORDER.desc);
+ q.addOrUpdateSort("4", SolrQuery.ORDER.desc);
+ Assert.assertEquals("1 asc,2 desc,3 asc,4 desc", q.get(CommonParams.SORT));
+
+ // Using SortClause
+ q.clearSorts();
+ q.addSort(new SortClause("1", SolrQuery.ORDER.asc));
+ q.addSort(new SortClause("2", SolrQuery.ORDER.asc));
+ q.addSort(new SortClause("3", SolrQuery.ORDER.asc));
+ q.addOrUpdateSort(SortClause.desc("2"));
+ q.addOrUpdateSort(SortClause.asc("4"));
+ Assert.assertEquals("1 asc,2 desc,3 asc,4 asc", q.get(CommonParams.SORT));
+ q.setSort(SortClause.asc("A"));
+ q.addSort(SortClause.asc("B"));
+ q.addSort(SortClause.asc("C"));
+ q.addSort(SortClause.asc("D"));
+ Assert.assertEquals("A asc,B asc,C asc,D asc", q.get(CommonParams.SORT));
+
+ // removeSort should ignore the ORDER
+ q.setSort(SortClause.asc("A"));
+ q.addSort(SortClause.asc("B"));
+ q.addSort(SortClause.asc("C"));
+ q.addSort(SortClause.asc("D"));
+ q.removeSort("A");
+ q.removeSort(SortClause.asc("C"));
+ q.removeSort(SortClause.desc("B"));
+ Assert.assertEquals("D asc", q.get(CommonParams.SORT));
+
+ // Verify that a query containing a SortClause is serializable
+ q.clearSorts();
+ q.addSort("1", SolrQuery.ORDER.asc);
+ ObjectOutputStream out = new ObjectOutputStream(new ByteArrayOutputStream());
+ out.writeObject(q);
+ out.close();
+ }
+
public void testFacetSort() {
SolrQuery q = new SolrQuery("dog");
assertEquals("count", q.getFacetSortString());
Modified: lucene/dev/branches/lucene4547/solr/webapp/web/css/styles/schema-browser.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/webapp/web/css/styles/schema-browser.css?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/webapp/web/css/styles/schema-browser.css (original)
+++ lucene/dev/branches/lucene4547/solr/webapp/web/css/styles/schema-browser.css Sun Jan 27 20:01:52 2013
@@ -390,7 +390,8 @@
color: #333;
}
-#content #schema-browser #data #field .topterms-holder
+#content #schema-browser #data #field .topterms-holder,
+#content #schema-browser #data #field .histogram-holder
{
border-left: 1px solid #f0f0f0;
display: none;
@@ -448,12 +449,12 @@
margin-bottom: 5px;
}
+/* possible overwrite with inline style */
#content #schema-browser .topterms-holder li p
{
background-color: #999;
color: #fff;
float: left;
- width: 25px;
}
#content #schema-browser .topterms-holder li p span
@@ -463,6 +464,7 @@
text-align: right;
}
+/* possible overwrite with inline style */
#content #schema-browser .topterms-holder li ul
{
margin-left: 30px;
@@ -492,51 +494,65 @@
background-color: #c0c0c0;
}
-#content #schema-browser #data #field .histogram-holder
+#content #schema-browser #data #field .histogram-holder ul
{
- border-left: 1px solid #f0f0f0;
- display: none;
- float: left;
- padding-left: 20px;
- padding-right: 20px;
+ margin-left: 25px;
+}
+
+#content #schema-browser #data #field .histogram-holder li
+{
+ margin-bottom: 2px;
+ position: relative;
+ width: 150px;
}
-#content #schema-browser #data #field .histogram-holder .histogram
+#content #schema-browser #data #field .histogram-holder li.odd
{
- height: 150px;
+ background-color: #f0f0f0;
}
-#content #schema-browser #data #field .histogram-holder .histogram.single canvas
+#content #schema-browser #data #field .histogram-holder li dl,
+#content #schema-browser #data #field .histogram-holder li dt
+{
+ padding-top: 1px;
+ padding-bottom: 1px;
+}
+
+#content #schema-browser #data #field .histogram-holder li dl
{
background-color: #c0c0c0;
+ min-width: 1px;
}
-#content #schema-browser #data #field .histogram-holder dt,
-#content #schema-browser #data #field .histogram-holder dd
+#content #schema-browser #data #field .histogram-holder li dt
{
- float: left;
- font-size: 10px;
- text-align: center;
+ color: #a0a0a0;
+ position: absolute;
+ overflow: hidden;
+ left: -25px;
+ top: 0px;
}
-#content #schema-browser #data #field .histogram-holder span
+#content #schema-browser #data #field .histogram-holder li dt span
{
- background-color: #f0f0f0;
display: block;
- width: 20px;
+ padding-right: 4px;
+ text-align: right;
}
-#content #schema-browser #data #field .histogram-holder dt
+#content #schema-browser #data #field .histogram-holder li dd
{
- padding-right: 1px;
+ clear: left;
+ float: left;
+ margin-left: 2px;
}
-#content #schema-browser #data #field .histogram-holder dd
+#content #schema-browser #data #field .histogram-holder li:hover dl
{
- padding-right: 3px;
+ background-color: #b0b0b0;
}
-#content #schema-browser #data #field .histogram-holder dd span
+#content #schema-browser #data #field .histogram-holder li:hover dt
{
- width: 25px;
-}
+ color: #333;
+}
\ No newline at end of file
Modified: lucene/dev/branches/lucene4547/solr/webapp/web/js/main.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/webapp/web/js/main.js?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/webapp/web/js/main.js (original)
+++ lucene/dev/branches/lucene4547/solr/webapp/web/js/main.js Sun Jan 27 20:01:52 2013
@@ -25,7 +25,6 @@ require
'lib/order!lib/jquery.form',
'lib/order!lib/jquery.jstree',
'lib/order!lib/jquery.sammy',
- 'lib/order!lib/jquery.sparkline',
'lib/order!lib/jquery.timeago',
'lib/order!lib/jquery.blockUI',
'lib/order!lib/highlight',
Modified: lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/app.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/app.js?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/app.js (original)
+++ lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/app.js Sun Jan 27 20:01:52 2013
@@ -468,6 +468,11 @@ var solr_admin = function( app_config )
return json_str;
};
+ this.format_number = function format_number( number )
+ {
+ return ( number || 0 ).toString().replace( /\B(?=(\d{3})+(?!\d))/g, ' ' );
+ };
+
};
var app = new solr_admin( app_config );
Modified: lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/dataimport.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/dataimport.js?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/dataimport.js (original)
+++ lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/dataimport.js Sun Jan 27 20:01:52 2013
@@ -440,11 +440,6 @@ sammy.get
var messages_count = 0;
for( var key in messages ) { messages_count++; }
- var format_number = function format_number( number )
- {
- return ( number || 0 ).toString().replace( /\B(?=(\d{3})+(?!\d))/g, '\'' );
- };
-
function dataimport_compute_details( response, details_element, elapsed_seconds )
{
details_element
@@ -464,10 +459,10 @@ sammy.get
{
var value = parseInt( response.statusMessages[document_config[key]], 10 );
- var detail = '<abbr title="' + document_config[key].esc() + '">' + key.esc() + '</abbr>: ' + format_number( value ).esc();
+ var detail = '<abbr title="' + document_config[key].esc() + '">' + key.esc() + '</abbr>: ' + app.format_number( value ).esc();
if( elapsed_seconds && 'skipped' !== key.toLowerCase() )
{
- detail += ' <span>(' + format_number( Math.round( value / elapsed_seconds ) ).esc() + '/s)</span>'
+ detail += ' <span>(' + app.format_number( Math.round( value / elapsed_seconds ) ).esc() + '/s)</span>'
}
document_details.push( detail );
@@ -523,7 +518,7 @@ sammy.get
/\d{4,}/g,
function( match, position, string )
{
- return format_number( parseInt( match, 10 ) );
+ return app.format_number( parseInt( match, 10 ) );
}
);
Modified: lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/schema-browser.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/schema-browser.js?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/schema-browser.js (original)
+++ lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/schema-browser.js Sun Jan 27 20:01:52 2013
@@ -66,9 +66,7 @@ var load_terminfo = function( trigger_el
},
success : function( response, text_status, xhr )
{
- $( 'span', trigger_element )
- .removeClass( 'loader' );
-
+ var additional_styles = [];
var field_data = response.fields[field];
if( !field_data || !( field_data.topTerms && field_data.histogram ) )
@@ -79,6 +77,11 @@ var load_terminfo = function( trigger_el
return false;
}
+ var get_width = function get_width()
+ {
+ return $( this ).width();
+ }
+
var topterms_holder_element = $( '.topterms-holder', data_element );
var histogram_holder_element = $( '.histogram-holder', data_element );
@@ -111,7 +114,7 @@ var load_terminfo = function( trigger_el
topterms_frq_last = topterms[i+1];
topterms_content += '<li class="clearfix">'
- + '<p><span>' + topterms_frq_last.esc() + '</span></p>' + "\n"
+ + '<p><span>' + app.format_number( topterms_frq_last ) + '</span></p>' + "\n"
+ '<ul>' + "\n";
}
@@ -129,6 +132,13 @@ var load_terminfo = function( trigger_el
topterms_table_element
.html( topterms_content );
+ var max_width = 10 + Math.max.apply( Math, $( 'p', topterms_table_element ).map( get_width ).get() );
+ additional_styles.push
+ (
+ topterms_table_element.selector + ' p { width: ' + max_width + 'px !important; }' + "\n" +
+ topterms_table_element.selector + ' ul { margin-left: ' + ( max_width + 5 ) + 'px !important; }'
+ );
+
topterms_count_element
.val( topterms_count );
@@ -152,52 +162,57 @@ var load_terminfo = function( trigger_el
histogram_holder_element
.show();
- var histogram_element = $( '.histogram', histogram_holder_element );
-
var histogram_values = luke_array_to_hash( field_data.histogram );
- var histogram_legend = '';
-
- histogram_holder_element
- .show();
-
+ var histogram_entries = [];
+
+ var histogram_max = null;
for( var key in histogram_values )
{
- histogram_legend += '<dt><span>' + key + '</span></dt>' + "\n" +
- '<dd title="' + key + '">' +
- '<span>' + histogram_values[key] + '</span>' +
- '</dd>' + "\n";
+ histogram_max = Math.max( histogram_max, histogram_values[key] );
}
- $( 'dl', histogram_holder_element )
- .html( histogram_legend );
-
- var histogram_values = luke_array_to_struct( field_data.histogram ).values;
-
- histogram_element
- .sparkline
+ for( var key in histogram_values )
+ {
+ histogram_entries.push
(
- histogram_values,
- {
- type : 'bar',
- barColor : '#c0c0c0',
- zeroColor : '#000000',
- height : histogram_element.height(),
- barWidth : 46,
- barSpacing : 3
- }
+ '<li>' + "\n" +
+ ' <dl class="clearfix" style="width: ' + ( ( histogram_values[key] / histogram_max ) * 100 ) + '%;">' + "\n" +
+ ' <dt><span>' + app.format_number( key ) + '</span></dt>' + "\n" +
+ ' <dd><span>' + app.format_number( histogram_values[key] ) + '</span></dd>' + "\n" +
+ ' </dl>' + "\n" +
+ '</li>'
);
+ }
+
+ $( 'ul', histogram_holder_element )
+ .html( histogram_entries.join( "\n" ) );
+
+ $( 'ul li:even', histogram_holder_element )
+ .addClass( 'odd' );
- 1 === histogram_values.length
- ? histogram_element.addClass( 'single' )
- : histogram_element.removeClass( 'single' );
+ var max_width = 10 + Math.max.apply( Math, $( 'dt', histogram_holder_element ).map( get_width ).get() );
+ additional_styles.push
+ (
+ histogram_holder_element.selector + ' ul { margin-left: ' + max_width + 'px !important; }' + "\n" +
+ histogram_holder_element.selector + ' li dt { left: ' + ( max_width * -1 ) + 'px !important; width: ' + max_width + 'px !important; }'
+ );
}
+ if( additional_styles )
+ {
+ terminfo_element
+ .prepend( '<style type="text/css">' + additional_styles.join( "\n" ) + '</style>' );
+ }
},
error : function( xhr, text_status, error_thrown)
{
+ terminfo_element
+ .addClass( 'disabled' );
},
complete : function( xhr, text_status )
{
+ $( 'span', trigger_element )
+ .removeClass( 'loader' );
}
}
);
Modified: lucene/dev/branches/lucene4547/solr/webapp/web/tpl/schema-browser.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/webapp/web/tpl/schema-browser.html?rev=1439164&r1=1439163&r2=1439164&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/webapp/web/tpl/schema-browser.html (original)
+++ lucene/dev/branches/lucene4547/solr/webapp/web/tpl/schema-browser.html Sun Jan 27 20:01:52 2013
@@ -158,12 +158,8 @@ limitations under the License.
<p class="head">Histogram:</p>
- <div class="histogram"></div>
+ <ul></ul>
- <dl class="clearfix">
-
- </dl>
-
</div>
</div>