You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2010/10/30 09:37:27 UTC
svn commit: r1029003 [2/2] - in /lucene/dev/branches/docvalues: ./ lucene/
lucene/contrib/
lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/
lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/
lucene/contri...
Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/ArrayUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/ArrayUtil.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/ArrayUtil.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/ArrayUtil.java Sat Oct 30 07:37:24 2010
@@ -18,6 +18,7 @@ package org.apache.lucene.util;
*/
import java.util.Collection;
+import java.util.Comparator;
/**
* Methods for manipulating arrays.
@@ -480,4 +481,177 @@ public final class ArrayUtil {
return result;
}
-}
+
+ /** SorterTemplate with custom {@link Comparator} */
+ private static <T> SorterTemplate getSorter(final T[] a, final Comparator<? super T> comp) {
+ return new SorterTemplate() {
+ @Override
+ protected void swap(int i, int j) {
+ final T o = a[i];
+ a[i] = a[j];
+ a[j] = o;
+ }
+
+ @Override
+ protected int compare(int i, int j) {
+ return comp.compare(a[i], a[j]);
+ }
+
+ @Override
+ protected void setPivot(int i) {
+ pivot = a[i];
+ }
+
+ @Override
+ protected int comparePivot(int j) {
+ return comp.compare(pivot, a[j]);
+ }
+
+ private T pivot;
+ };
+ }
+
+ /** Natural SorterTemplate */
+ private static <T extends Comparable<? super T>> SorterTemplate getSorter(final T[] a) {
+ return new SorterTemplate() {
+ @Override
+ protected void swap(int i, int j) {
+ final T o = a[i];
+ a[i] = a[j];
+ a[j] = o;
+ }
+
+ @Override
+ protected int compare(int i, int j) {
+ return a[i].compareTo(a[j]);
+ }
+
+ @Override
+ protected void setPivot(int i) {
+ pivot = a[i];
+ }
+
+ @Override
+ protected int comparePivot(int j) {
+ return pivot.compareTo(a[j]);
+ }
+
+ private T pivot;
+ };
+ }
+
+ // quickSorts (endindex is exclusive!):
+
+ /**
+ * Sorts the given array slice using the {@link Comparator}. This method uses the quick sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ * @param fromIndex start index (inclusive)
+ * @param toIndex end index (exclusive)
+ */
+ public static <T> void quickSort(T[] a, int fromIndex, int toIndex, Comparator<? super T> comp) {
+ getSorter(a, comp).quickSort(fromIndex, toIndex-1);
+ }
+
+ /**
+ * Sorts the given array using the {@link Comparator}. This method uses the quick sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ */
+ public static <T> void quickSort(T[] a, Comparator<? super T> comp) {
+ quickSort(a, 0, a.length, comp);
+ }
+
+ /**
+ * Sorts the given array slice in natural order. This method uses the quick sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ * @param fromIndex start index (inclusive)
+ * @param toIndex end index (exclusive)
+ */
+ public static <T extends Comparable<? super T>> void quickSort(T[] a, int fromIndex, int toIndex) {
+ getSorter(a).quickSort(fromIndex, toIndex-1);
+ }
+
+ /**
+ * Sorts the given array in natural order. This method uses the quick sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ */
+ public static <T extends Comparable<? super T>> void quickSort(T[] a) {
+ quickSort(a, 0, a.length);
+ }
+
+ // mergeSorts:
+
+ /**
+ * Sorts the given array slice using the {@link Comparator}. This method uses the merge sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ * @param fromIndex start index (inclusive)
+ * @param toIndex end index (exclusive)
+ */
+ public static <T> void mergeSort(T[] a, int fromIndex, int toIndex, Comparator<? super T> comp) {
+ getSorter(a, comp).mergeSort(fromIndex, toIndex-1);
+ }
+
+ /**
+ * Sorts the given array using the {@link Comparator}. This method uses the merge sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ */
+ public static <T> void mergeSort(T[] a, Comparator<? super T> comp) {
+ mergeSort(a, 0, a.length, comp);
+ }
+
+ /**
+ * Sorts the given array slice in natural order. This method uses the merge sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ * @param fromIndex start index (inclusive)
+ * @param toIndex end index (exclusive)
+ */
+ public static <T extends Comparable<? super T>> void mergeSort(T[] a, int fromIndex, int toIndex) {
+ getSorter(a).mergeSort(fromIndex, toIndex-1);
+ }
+
+ /**
+ * Sorts the given array in natural order. This method uses the merge sort
+ * algorithm, but falls back to insertion sort for small arrays.
+ */
+ public static <T extends Comparable<? super T>> void mergeSort(T[] a) {
+ mergeSort(a, 0, a.length);
+ }
+
+ // insertionSorts:
+
+ /**
+ * Sorts the given array slice using the {@link Comparator}. This method uses the insertion sort
+ * algorithm. It is only recommened to use this algorithm for partially sorted small arrays!
+ * @param fromIndex start index (inclusive)
+ * @param toIndex end index (exclusive)
+ */
+ public static <T> void insertionSort(T[] a, int fromIndex, int toIndex, Comparator<? super T> comp) {
+ getSorter(a, comp).insertionSort(fromIndex, toIndex-1);
+ }
+
+ /**
+ * Sorts the given array using the {@link Comparator}. This method uses the insertion sort
+ * algorithm. It is only recommened to use this algorithm for partially sorted small arrays!
+ */
+ public static <T> void insertionSort(T[] a, Comparator<? super T> comp) {
+ insertionSort(a, 0, a.length, comp);
+ }
+
+ /**
+ * Sorts the given array slice in natural order. This method uses the insertion sort
+ * algorithm. It is only recommened to use this algorithm for partially sorted small arrays!
+ * @param fromIndex start index (inclusive)
+ * @param toIndex end index (exclusive)
+ */
+ public static <T extends Comparable<? super T>> void insertionSort(T[] a, int fromIndex, int toIndex) {
+ getSorter(a).insertionSort(fromIndex, toIndex-1);
+ }
+
+ /**
+ * Sorts the given array in natural order. This method uses the insertion sort
+ * algorithm. It is only recommened to use this algorithm for partially sorted small arrays!
+ */
+ public static <T extends Comparable<? super T>> void insertionSort(T[] a) {
+ insertionSort(a, 0, a.length);
+ }
+
+}
\ No newline at end of file
Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/BytesRefHash.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/BytesRefHash.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/BytesRefHash.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/BytesRefHash.java Sat Oct 30 07:37:24 2010
@@ -45,18 +45,23 @@ import org.apache.lucene.util.ByteBlockP
*/
public final class BytesRefHash {
- private final ByteBlockPool pool;
+ public static final int DEFAULT_CAPACITY = 16;
+
+ // the following fields are needed by comparator,
+ // so package private to prevent access$-methods:
+ final ByteBlockPool pool;
+ int[] bytesStart;
+
+ private final BytesRef scratch1 = new BytesRef();
private int hashSize;
private int hashHalfSize;
private int hashMask;
private int count;
private int lastCount = -1;
private int[] ords;
- private int[] bytesStart;
- public static final int DEFAULT_CAPACITY = 16;
private final BytesStartArray bytesStartArray;
private AtomicLong bytesUsed;
-
+
/**
* Creates a new {@link BytesRefHash} with a {@link ByteBlockPool} using a
* {@link DirectAllocator}.
@@ -152,84 +157,49 @@ public final class BytesRefHash {
* @param comp
* the {@link Comparator} used for sorting
*/
- public int[] sort(Comparator<BytesRef> comp) {
+ public int[] sort(final Comparator<BytesRef> comp) {
final int[] compact = compact();
- quickSort(comp, compact, 0, count - 1);
- return compact;
- }
-
- private void quickSort(Comparator<BytesRef> comp, int[] entries, int lo,
- int hi) {
- if (lo >= hi)
- return;
- if (hi == 1 + lo) {
- if (compare(comp, entries[lo], entries[hi]) > 0) {
- final int tmp = entries[lo];
- entries[lo] = entries[hi];
- entries[hi] = tmp;
- }
- return;
- }
- final int mid = (lo + hi) >>> 1;
- if (compare(comp, entries[lo], entries[mid]) > 0) {
- int tmp = entries[lo];
- entries[lo] = entries[mid];
- entries[mid] = tmp;
- }
-
- if (compare(comp, entries[mid], entries[hi]) > 0) {
- int tmp = entries[mid];
- entries[mid] = entries[hi];
- entries[hi] = tmp;
-
- if (compare(comp, entries[lo], entries[mid]) > 0) {
- int tmp2 = entries[lo];
- entries[lo] = entries[mid];
- entries[mid] = tmp2;
- }
- }
- int left = lo + 1;
- int right = hi - 1;
-
- if (left >= right)
- return;
-
- final int partition = entries[mid];
-
- for (;;) {
- while (compare(comp, entries[right], partition) > 0)
- --right;
-
- while (left < right && compare(comp, entries[left], partition) <= 0)
- ++left;
-
- if (left < right) {
- final int tmp = entries[left];
- entries[left] = entries[right];
- entries[right] = tmp;
- --right;
- } else {
- break;
+ new SorterTemplate() {
+ @Override
+ protected void swap(int i, int j) {
+ final int o = compact[i];
+ compact[i] = compact[j];
+ compact[j] = o;
+ }
+
+ @Override
+ protected int compare(int i, int j) {
+ final int ord1 = compact[i], ord2 = compact[j];
+ assert bytesStart.length > ord1 && bytesStart.length > ord2;
+ return comp.compare(pool.setBytesRef(scratch1, bytesStart[ord1]),
+ pool.setBytesRef(scratch2, bytesStart[ord2]));
+ }
+
+ @Override
+ protected void setPivot(int i) {
+ final int ord = compact[i];
+ assert bytesStart.length > ord;
+ pool.setBytesRef(pivot, bytesStart[ord]);
}
- }
-
- quickSort(comp, entries, lo, left);
- quickSort(comp, entries, left + 1, hi);
+
+ @Override
+ protected int comparePivot(int j) {
+ final int ord = compact[j];
+ assert bytesStart.length > ord;
+ return comp.compare(pivot,
+ pool.setBytesRef(scratch2, bytesStart[ord]));
+ }
+
+ private final BytesRef pivot = new BytesRef(),
+ scratch1 = new BytesRef(), scratch2 = new BytesRef();
+ }.quickSort(0, count - 1);
+ return compact;
}
- private final BytesRef scratch1 = new BytesRef();
- private final BytesRef scratch2 = new BytesRef();
-
private boolean equals(int ord, BytesRef b) {
return pool.setBytesRef(scratch1, bytesStart[ord]).bytesEquals(b);
}
- private int compare(Comparator<BytesRef> comp, int ord1, int ord2) {
- assert bytesStart.length > ord1 && bytesStart.length > ord2;
- return comp.compare(pool.setBytesRef(scratch1, bytesStart[ord1]),
- pool.setBytesRef(scratch2, bytesStart[ord2]));
- }
-
private boolean shrink(int targetSize) {
// Cannot use ArrayUtil.shrink because we require power
// of 2:
Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java Sat Oct 30 07:37:24 2010
@@ -34,7 +34,6 @@ import org.apache.lucene.util.RamUsageEs
import java.util.ArrayList;
import java.util.BitSet;
-import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -555,9 +554,8 @@ final public class BasicOperations {
}
public void sort() {
- if (count > 1) {
- Arrays.sort(points, 0, count);
- }
+ // mergesort seems to perform better on already sorted arrays:
+ if (count > 1) ArrayUtil.mergeSort(points, 0, count);
}
public void add(Transition t) {
Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/State.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/State.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/State.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/State.java Sat Oct 30 07:37:24 2010
@@ -32,7 +32,6 @@ import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.RamUsageEstimator;
import java.io.Serializable;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
@@ -232,8 +231,8 @@ public class State implements Serializab
/** Sorts transitions array in-place. */
public void sortTransitions(Comparator<Transition> comparator) {
- if (numTransitions > 1)
- Arrays.sort(transitionsArray, 0, numTransitions, comparator);
+ // mergesort seems to perform better on already sorted arrays:
+ if (numTransitions > 1) ArrayUtil.mergeSort(transitionsArray, 0, numTransitions, comparator);
}
/**
Modified: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/TestExternalCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/TestExternalCodecs.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/TestExternalCodecs.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/TestExternalCodecs.java Sat Oct 30 07:37:24 2010
@@ -657,10 +657,8 @@ public class TestExternalCodecs extends
IndexReader r = IndexReader.open(w);
IndexReader[] subs = r.getSequentialSubReaders();
- assertTrue(subs.length > 1);
// test each segment
for(int i=0;i<subs.length;i++) {
- //System.out.println("test i=" + i);
testTermsOrder(subs[i]);
}
// test each multi-reader
@@ -693,6 +691,7 @@ public class TestExternalCodecs extends
dir.close();
}
+
private void testTermsOrder(IndexReader r) throws Exception {
// Verify sort order matches what my comparator said:
Propchange: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/document/TestDateTools.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/document/TestDateTools.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/lucene/src/test/org/apache/lucene/document/TestDateTools.java:967125-979432
-/lucene/dev/trunk/lucene/src/test/org/apache/lucene/document/TestDateTools.java:1021634-1027393
+/lucene/dev/trunk/lucene/src/test/org/apache/lucene/document/TestDateTools.java:1021634-1029001
/lucene/java/branches/flex_1458/src/test/org/apache/lucene/document/TestDateTools.java:824912-931101
/lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/document/TestDateTools.java:748824
/lucene/java/branches/lucene_2_9/src/test/org/apache/lucene/document/TestDateTools.java:829134,829881,831036,896850,909334,948516
Propchange: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/document/TestNumberTools.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/document/TestNumberTools.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/lucene/src/test/org/apache/lucene/document/TestNumberTools.java:967125-979432
-/lucene/dev/trunk/lucene/src/test/org/apache/lucene/document/TestNumberTools.java:1021634-1027393
+/lucene/dev/trunk/lucene/src/test/org/apache/lucene/document/TestNumberTools.java:1021634-1029001
/lucene/java/branches/flex_1458/src/test/org/apache/lucene/document/TestNumberTools.java:824912-931101
/lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/document/TestNumberTools.java:748824
/lucene/java/branches/lucene_2_9/src/test/org/apache/lucene/document/TestNumberTools.java:829134,829881,831036,896850,909334,948516
Propchange: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:967125-979432
-/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:1021634-1027393
+/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:1021634-1029001
/lucene/java/branches/flex_1458/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:824912-931101
/lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:748824
/lucene/java/branches/lucene_2_9/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java:829134,829881,831036,896850,909334,948516
Modified: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java Sat Oct 30 07:37:24 2010
@@ -353,14 +353,25 @@ public class TestQueryParser extends Luc
assertQueryEquals("a AND -b", null, "+a -b");
assertQueryEquals("a AND !b", null, "+a -b");
assertQueryEquals("a && b", null, "+a +b");
- assertQueryEquals("a && ! b", null, "+a -b");
+// assertQueryEquals("a && ! b", null, "+a -b");
assertQueryEquals("a OR b", null, "a b");
assertQueryEquals("a || b", null, "a b");
assertQueryEquals("a OR !b", null, "a -b");
- assertQueryEquals("a OR ! b", null, "a -b");
+// assertQueryEquals("a OR ! b", null, "a -b");
assertQueryEquals("a OR -b", null, "a -b");
+ // +,-,! should be directly adjacent to operand (i.e. not separated by whitespace) to be treated as an operator
+ Analyzer a = new Analyzer() {
+ @Override
+ public TokenStream tokenStream(String fieldName, Reader reader) {
+ return new MockTokenizer(reader, MockTokenizer.WHITESPACE, false);
+ }
+ };
+ assertQueryEquals("a - b", a, "a - b");
+ assertQueryEquals("a + b", a, "a + b");
+ assertQueryEquals("a ! b", a, "a ! b");
+
assertQueryEquals("+term -term term", null, "+term -term term");
assertQueryEquals("foo:term AND field:anotherTerm", null,
"+foo:term +anotherterm");
Modified: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestArrayUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestArrayUtil.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestArrayUtil.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestArrayUtil.java Sat Oct 30 07:37:24 2010
@@ -17,6 +17,9 @@ package org.apache.lucene.util;
* limitations under the License.
*/
+import java.util.Arrays;
+import java.util.Collections;
+
public class TestArrayUtil extends LuceneTestCase {
// Ensure ArrayUtil.getNextSize gives linear amortized cost of realloc/copy
@@ -113,4 +116,127 @@ public class TestArrayUtil extends Lucen
assertFalse(left + " does not equal: " + right, ArrayUtil.equals(leftChars, 25, rightChars, 0, left.length()));
assertFalse(left + " does not equal: " + right, ArrayUtil.equals(leftChars, 12, rightChars, 0, left.length()));
}
+
+ private Integer[] createRandomArray(int maxSize) {
+ final Integer[] a = new Integer[random.nextInt(maxSize) + 1];
+ for (int i = 0; i < a.length; i++) {
+ a[i] = Integer.valueOf(random.nextInt(a.length));
+ }
+ return a;
+ }
+
+ public void testQuickSort() {
+ for (int i = 0, c = 500 * RANDOM_MULTIPLIER; i < c; i++) {
+ Integer[] a1 = createRandomArray(1000), a2 = a1.clone();
+ ArrayUtil.quickSort(a1);
+ Arrays.sort(a2);
+ assertArrayEquals(a2, a1);
+
+ a1 = createRandomArray(1000);
+ a2 = a1.clone();
+ ArrayUtil.quickSort(a1, Collections.reverseOrder());
+ Arrays.sort(a2, Collections.reverseOrder());
+ assertArrayEquals(a2, a1);
+ // reverse back, so we can test that completely backwards sorted array (worst case) is working:
+ ArrayUtil.quickSort(a1);
+ Arrays.sort(a2);
+ assertArrayEquals(a2, a1);
+ }
+ }
+
+ public void testMergeSort() {
+ for (int i = 0, c = 500 * RANDOM_MULTIPLIER; i < c; i++) {
+ Integer[] a1 = createRandomArray(1000), a2 = a1.clone();
+ ArrayUtil.mergeSort(a1);
+ Arrays.sort(a2);
+ assertArrayEquals(a2, a1);
+
+ a1 = createRandomArray(1000);
+ a2 = a1.clone();
+ ArrayUtil.mergeSort(a1, Collections.reverseOrder());
+ Arrays.sort(a2, Collections.reverseOrder());
+ assertArrayEquals(a2, a1);
+ // reverse back, so we can test that completely backwards sorted array (worst case) is working:
+ ArrayUtil.mergeSort(a1);
+ Arrays.sort(a2);
+ assertArrayEquals(a2, a1);
+ }
+ }
+
+ public void testInsertionSort() {
+ for (int i = 0, c = 500 * RANDOM_MULTIPLIER; i < c; i++) {
+ Integer[] a1 = createRandomArray(30), a2 = a1.clone();
+ ArrayUtil.insertionSort(a1);
+ Arrays.sort(a2);
+ assertArrayEquals(a2, a1);
+
+ a1 = createRandomArray(30);
+ a2 = a1.clone();
+ ArrayUtil.insertionSort(a1, Collections.reverseOrder());
+ Arrays.sort(a2, Collections.reverseOrder());
+ assertArrayEquals(a2, a1);
+ // reverse back, so we can test that completely backwards sorted array (worst case) is working:
+ ArrayUtil.insertionSort(a1);
+ Arrays.sort(a2);
+ assertArrayEquals(a2, a1);
+ }
+ }
+
+ static class Item implements Comparable<Item> {
+ final int val, order;
+
+ Item(int val, int order) {
+ this.val = val;
+ this.order = order;
+ }
+
+ public int compareTo(Item other) {
+ return this.order - other.order;
+ }
+
+ @Override
+ public String toString() {
+ return Integer.toString(val);
+ }
+ }
+
+ public void testMergeSortStability() {
+ Item[] items = new Item[100];
+ for (int i = 0; i < items.length; i++) {
+ // half of the items have value but same order. The value of this items is sorted,
+ // so they should always be in order after sorting.
+ // The other half has defined order, but no (-1) value (they should appear after
+ // all above, when sorted).
+ final boolean equal = random.nextBoolean();
+ items[i] = new Item(equal ? (i+1) : -1, equal ? 0 : (random.nextInt(1000)+1));
+ }
+
+ if (VERBOSE) System.out.println("Before: " + Arrays.toString(items));
+ // if you replace this with ArrayUtil.quickSort(), test should fail:
+ ArrayUtil.mergeSort(items);
+ if (VERBOSE) System.out.println("Sorted: " + Arrays.toString(items));
+
+ Item last = items[0];
+ for (int i = 1; i < items.length; i++) {
+ final Item act = items[i];
+ if (act.order == 0) {
+ // order of "equal" items should be not mixed up
+ assertTrue(act.val > last.val);
+ }
+ assertTrue(act.order >= last.order);
+ last = act;
+ }
+ }
+
+ // should produce no exceptions
+ public void testEmptyArraySort() {
+ Integer[] a = new Integer[0];
+ ArrayUtil.quickSort(a);
+ ArrayUtil.mergeSort(a);
+ ArrayUtil.insertionSort(a);
+ ArrayUtil.quickSort(a, Collections.reverseOrder());
+ ArrayUtil.mergeSort(a, Collections.reverseOrder());
+ ArrayUtil.insertionSort(a, Collections.reverseOrder());
+ }
+
}
Propchange: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestAttributeSource.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/util/TestAttributeSource.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/lucene/src/test/org/apache/lucene/util/TestAttributeSource.java:967125-979432
-/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestAttributeSource.java:1021634-1027393
+/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestAttributeSource.java:1021634-1029001
/lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/TestAttributeSource.java:824912-931101
/lucene/java/branches/lucene_2_9/src/test/org/apache/lucene/util/TestAttributeSource.java:909334,948516
/lucene/java/trunk/src/test/org/apache/lucene/util/TestAttributeSource.java:924483-924731,924781,925176-925462
Modified: lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java Sat Oct 30 07:37:24 2010
@@ -174,6 +174,8 @@ public class TestBytesRefHash extends Lu
hash.add(ref);
strings.add(str);
}
+ // We use the UTF-16 comparator here, because we need to be able to
+ // compare to native String.compareTo() [UTF-16]:
int[] sort = hash.sort(BytesRef.getUTF8SortedAsUTF16Comparator());
assertTrue(strings.size() < sort.length);
int i = 0;
Propchange: lucene/dev/branches/docvalues/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestISOLatin1AccentFilter.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestISOLatin1AccentFilter.java:980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestISOLatin1AccentFilter.java:967125-979432
-/lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestISOLatin1AccentFilter.java:1021634-1027393
+/lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestISOLatin1AccentFilter.java:1021634-1029001
/lucene/java/branches/flex_1458/src/test/org/apache/lucene/analysis/TestISOLatin1AccentFilter.java:824912-931101
/lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/analysis/TestISOLatin1AccentFilter.java:748824
/lucene/java/branches/lucene_2_9/src/test/org/apache/lucene/analysis/TestISOLatin1AccentFilter.java:829134,829881,831036,896850,909334
Propchange: lucene/dev/branches/docvalues/solr/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr:949730,957490*,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr:967125-979432
-/lucene/dev/trunk/solr:1021634-1027393
+/lucene/dev/trunk/solr:1021634-1029001
/lucene/java/branches/lucene_2_4/solr:748824
/lucene/java/branches/lucene_2_9/solr:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr:818601-821336
Modified: lucene/dev/branches/docvalues/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/CHANGES.txt?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/CHANGES.txt (original)
+++ lucene/dev/branches/docvalues/solr/CHANGES.txt Sat Oct 30 07:37:24 2010
@@ -249,7 +249,8 @@ New Features
(Martijn van Groningen, Emmanuel Keller, Shalin Shekhar Mangar,
Koji Sekiguchi, Iv�n de Prado, Ryan McKinley, Marc Sturlese, Peter Karich,
Bojan Smid, Charles Hornberger, Dieter Grad, Dmitry Lihachev, Doug Steigerwald,
- Karsten Sperling, Michael Gundlach, Oleg Gnatovskiy, Thomas Traeger, yonik)
+ Karsten Sperling, Michael Gundlach, Oleg Gnatovskiy, Thomas Traeger,
+ Harish Agarwal, yonik)
* SOLR-1316: Create autosuggest component.
(Ankul Garg, Jason Rutherglen, Shalin Shekhar Mangar, gsingers, Robert Muir, ab)
Propchange: lucene/dev/branches/docvalues/solr/CHANGES.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/CHANGES.txt:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/CHANGES.txt:967125-979432
-/lucene/dev/trunk/solr/CHANGES.txt:1021634-1027393
+/lucene/dev/trunk/solr/CHANGES.txt:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/CHANGES.txt:748824
/lucene/java/branches/lucene_2_9/solr/CHANGES.txt:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/CHANGES.txt:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/KEYS
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/KEYS:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/KEYS:967125-979432
-/lucene/dev/trunk/solr/KEYS:1021634-1027393
+/lucene/dev/trunk/solr/KEYS:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/KEYS:748824
/lucene/java/branches/lucene_2_9/solr/KEYS:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/KEYS:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/LICENSE.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/LICENSE.txt:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/LICENSE.txt:967125-979432
-/lucene/dev/trunk/solr/LICENSE.txt:1021634-1027393
+/lucene/dev/trunk/solr/LICENSE.txt:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/LICENSE.txt:748824
/lucene/java/branches/lucene_2_9/solr/LICENSE.txt:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/LICENSE.txt:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/NOTICE.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/NOTICE.txt:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/NOTICE.txt:967125-979432
-/lucene/dev/trunk/solr/NOTICE.txt:1021634-1027393
+/lucene/dev/trunk/solr/NOTICE.txt:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/NOTICE.txt:748824
/lucene/java/branches/lucene_2_9/solr/NOTICE.txt:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/NOTICE.txt:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/README.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/README.txt:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/README.txt:967125-979432
-/lucene/dev/trunk/solr/README.txt:1021634-1027393
+/lucene/dev/trunk/solr/README.txt:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/README.txt:748824
/lucene/java/branches/lucene_2_9/solr/README.txt:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/README.txt:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/build.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/build.xml:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/build.xml:967125-979432
-/lucene/dev/trunk/solr/build.xml:1021634-1027393
+/lucene/dev/trunk/solr/build.xml:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/build.xml:748824
/lucene/java/branches/lucene_2_9/solr/build.xml:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/build.xml:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/client/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/client:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/client:967125-979432
-/lucene/dev/trunk/solr/client:1021634-1027393
+/lucene/dev/trunk/solr/client:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/client:748824
/lucene/java/branches/lucene_2_9/solr/client:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/client:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/common-build.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/common-build.xml:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/common-build.xml:967125-979432
-/lucene/dev/trunk/solr/common-build.xml:1021634-1027393
+/lucene/dev/trunk/solr/common-build.xml:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/common-build.xml:748824
/lucene/java/branches/lucene_2_9/solr/common-build.xml:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/common-build.xml:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/contrib:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/contrib:967125-979432
-/lucene/dev/trunk/solr/contrib:1021634-1027393
+/lucene/dev/trunk/solr/contrib:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/contrib:748824
/lucene/java/branches/lucene_2_9/solr/contrib:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/contrib:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/example/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/example:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/example:967125-979432
-/lucene/dev/trunk/solr/example:1021634-1027393
+/lucene/dev/trunk/solr/example:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/example:748824
/lucene/java/branches/lucene_2_9/solr/example:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/example:818601-821336
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/solrconfig.xml?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/solrconfig.xml Sat Oct 30 07:37:24 2010
@@ -871,6 +871,14 @@
<!--<int name="carrot.numDescriptions">5</int>-->
<!-- produce sub clusters -->
<bool name="carrot.outputSubClusters">false</bool>
+
+ <str name="defType">edismax</str>
+ <str name="qf">
+ text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+ </str>
+ <str name="q.alt">*:*</str>
+ <str name="rows">10</str>
+ <str name="fl">*,score</str>
</lst>
<arr name="last-components">
<str>clusteringComponent</str>
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/VM_global_library.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/VM_global_library.vm?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/VM_global_library.vm (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/VM_global_library.vm Sat Oct 30 07:37:24 2010
@@ -16,16 +16,21 @@
#macro(annTitle $msg)#if($annotate == true)title="$msg"#end#end
-#macro(spatial)#if($request.params.get('sfield'))&sfield=store#end#if($request.params.get('pt'))&pt=$request.params.get('pt')#end#if($request.params.get('d'))&d=$request.params.get('d')#end#end
+#macro(spatial)#if($request.params.get('sfield'))&sfield=store#end#if($request.params.get('pt'))&pt=$request.params.get('pt')#end#if($request.params.get('d'))&d=$request.params.get('d')#end#end
-#macro(lensNoQ)?#if($request.params.getParams('fq') and $list.size($request.params.getParams('fq')) > 0)&#fqs($request.params.getParams('fq'))#end#debug#boostPrice#annotate#spatial#end
+#macro(qOpts)#set($queryOpts = $request.params.get("queryOpts"))#if($queryOpts && $queryOpts != "")&queryOpts=$queryOpts#end#end
+
+#macro(group)#if($request.params.getBool("group") == true)&group=true#end#if($request.params.get("group.field"))#foreach($grp in $request.params.getParams('group.field'))&group.field=$grp#end#end#end
+
+#macro(lensNoQ)?#if($request.params.getParams('fq') and $list.size($request.params.getParams('fq')) > 0)&#fqs($request.params.getParams('fq'))#end#debug#boostPrice#annotate#spatial#qOpts#group#end
#macro(lens)#lensNoQ#q#end
+
#macro(url_for_lens)#{url_for_home}#lens#end
#macro(url_for_start $start)#url_for_home#lens&start=$start#end
-#macro(url_for_filters $p)#url_for_home?#q#boostPrice#spatial#if($list.size($p) > 0)&#fqs($p)#end#debug#end
+#macro(url_for_filters $p)#url_for_home?#q#boostPrice#spatial#qOpts#if($list.size($p) > 0)&#fqs($p)#end#debug#end
#macro(url_for_nested_facet_query $field)#url_for_home#lens&fq=$esc.url($field)#end
@@ -165,4 +170,14 @@
#end
</ul>
#end
-#end
\ No newline at end of file
+#end
+
+#macro(field $f)
+ #if($response.response.highlighting.get($docId).get($f).get(0))
+ $!response.response.highlighting.get($docId).get($f).get(0)
+ #else
+ #foreach($v in $doc.getFieldValues($f))
+ $v
+ #end
+ #end
+#end
\ No newline at end of file
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/browse.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/browse.vm?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/browse.vm (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/browse.vm Sat Oct 30 07:37:24 2010
@@ -13,23 +13,33 @@
</div>
<div class="pagination">
- <span><span class="results-found">$page.results_found</span> results found in ${response.responseHeader.QTime} ms</span>
+ #if($response.response.get('grouped'))
+ <span><span class="results-found">$response.response.get('grouped').size() group(s)</span> found in ${response.responseHeader.QTime} ms</span>
+ #else<span><span class="results-found">$page.results_found</span> results found in ${response.responseHeader.QTime} ms</span>
Page <span class="page-num">$page.current_page_number</span> of <span
- class="page-count">$page.page_count</span>
+ class="page-count">$page.page_count</span>#end
</div>
<div class="results">
- #foreach($doc in $response.results)
- #parse("hit.vm")
+ #if($response.response.get('grouped'))
+ #foreach($grouping in $response.response.get('grouped'))
+ #parse("hitGrouped.vm")
+ #end
+ #else
+ #foreach($doc in $response.results)
+ #parse("hit.vm")
+ #end
#end
</div>
<div class="pagination">
+ #if($response.response.get('grouped'))
+ #else
#link_to_previous_page("previous")
<span class="results-found">$page.results_found</span> results found.
Page <span class="page-num">$page.current_page_number</span> of <span
class="page-count">$page.page_count</span>
#link_to_next_page("next")
-
+ #end
<br/>
</div>
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/facets.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/facets.vm?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/facets.vm (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/facets.vm Sat Oct 30 07:37:24 2010
@@ -3,6 +3,7 @@
#parse('facet_ranges.vm')
#parse('facet_dates.vm')
#parse('facet_pivot.vm')
+#parse('cluster.vm')
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/hit.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/hit.vm?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/hit.vm (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/hit.vm Sat Oct 30 07:37:24 2010
@@ -1,41 +1,5 @@
#set($docId = $doc.getFieldValue('id'))
-#macro(field $f)
- #if($response.response.highlighting.get($docId).get($f).get(0))
- $!response.response.highlighting.get($docId).get($f).get(0)
- #else
- #foreach($v in $doc.getFieldValues($f))
- $v
- #end
- #end
-#end
-<div class="result-document">
- <div class="result-title"><b>#field('name')</b><span class="mlt">#if($params.getBool('mlt', false) == false)<a href="#lensNoQ&q=id:$docId&mlt=true">More Like This</a>#end</span></div>
- ##do we have a physical store for this product
- #set($store = $doc.getFieldValue('store'))
- #if($store)<div class="map"><img src="http://maps.google.com/maps/api/staticmap?&zoom=12&size=150x80&maptype=roadmap&markers=$doc.getFieldValue('store')&sensor=false" /><div><small><a target="_map" href="http://maps.google.com/?q=$store&source=embed">Larger Map</a></small></div></div>#end
- <div>Price: $!number.currency($doc.getFieldValue('price'))</div>
- <div>Features: #field('features')</div>
- <div>In Stock: #field('inStock')</div>
- <div class="mlt">
- #set($mlt = $mltResults.get($docId))
- #set($mltOn = $params.getBool('mlt'))
- #if($mltOn == true)<div class="field-name">Similar Items</div>#end
- #if ($mltOn && $mlt && $mlt.size() > 0)
- <ul>
- #foreach($mltHit in $mlt)
- #set($mltId = $mltHit.getFieldValue('id'))
- <li><div><a href="#url_for_home?q=id:$mltId">$mltId</a></div><div><span class="field-name">Name:</span> $mltHit.getFieldValue('name')</div>
- <div><span class="field-name">Price:</span> $!number.currency($mltHit.getFieldValue('price')) <span class="field-name">In Stock:</span> $mltHit.getFieldValue('inStock')</div>
- </li>
- #end
- </ul>
- #elseif($mltOn && $mlt.size() == 0)
- <div>No Similar Items Found</div>
- #end
- </div>
- #if($params.getBool("debugQuery",false))
- <a href="#" onclick='jQuery(this).siblings("pre").toggle(); return false;'>toggle explain</a>
- <pre style="display:none">$response.getExplainMap().get($doc.getFirstValue('id'))</pre>
- #end
+<div class="result-document">
+ #parse("doc.vm")
</div>
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/layout.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/layout.vm?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/layout.vm (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/layout.vm Sat Oct 30 07:37:24 2010
@@ -1,47 +1,20 @@
<html>
- <head>
- ## An example of using an arbitrary request parameter
- <title>#param('title')</title>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
-
-<script type="text/javascript" src="#{url_for_solr}/admin/jquery-1.2.3.min.js"></script>
- <link rel="stylesheet" type="text/css" href="#{url_for_solr}/admin/file?file=/velocity/main.css&contentType=text/css"/>
- <link rel="stylesheet" href="#{url_for_solr}/admin/file?file=/velocity/jquery.autocomplete.css&contentType=text/css" type="text/css" />
- <script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/jquery.autocomplete.js&contentType=text/javascript"></script>
-
-
- <script>
- $(document).ready(function(){
- $("\#q").autocomplete('#{url_for_solr}/terms', { ## backslash escaped #q as that is a macro defined in VM_global_library.vm
- extraParams:{
- 'terms.prefix': function() { return $("\#q").val();},
- 'terms.sort': 'count',
- 'terms.fl': 'name',
- 'wt': 'velocity',
- 'v.template': 'suggest'
- }
- }
- );
-
- // http://localhost:8983/solr/terms?terms.fl=name&terms.prefix=i&terms.sort=count
- });
-
- </script>
-
- </head>
+<head>
+ #parse("head.vm")
+</head>
<body>
<div id="admin"><a href="#url_for_solr/admin">Solr Admin</a></div>
<div id="header">
#parse("header.vm")
</div>
-
+ <div id="tabs">
+ #parse("tabs.vm")
+ </div>
<div id="content">
$content
</div>
-
<div id="footer">
#parse("footer.vm")
</div>
-
</body>
</html>
\ No newline at end of file
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/main.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/main.css?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/main.css (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/main.css Sat Oct 30 07:37:24 2010
@@ -122,7 +122,6 @@ a {
.query-box .inputs{
left: 180px;
- top: -20px;
position: relative;
}
@@ -178,4 +177,8 @@ a {
li.show {
list-style: disc;
+}
+
+.group-value{
+ font-weight: bold;
}
\ No newline at end of file
Modified: lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/query.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/query.vm?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/query.vm (original)
+++ lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/query.vm Sat Oct 30 07:37:24 2010
@@ -3,21 +3,8 @@
<div class="inputs">
<span #annTitle("Add the query using the &q= parameter")>Find: <input type="text" id="q" name="q" value="$!esc.html($params.get('q'))"/> <input type="submit" id="querySubmit"/> <input type="reset"/></span>
<div class="query-boost"><span #annTitle("Add the boost function &bf=price to the query")><input type="checkbox" name="bf" value="price" #if($request.params.get('bf') == 'price')checked="true"#end>Boost by Price</input></span>
- <span >
- #set($loc = $request.params.get('pt'))
- #set($dist = $request.params.get('d', "10"))
- <label #annTitle("Add the &pt parameter")>Location Filter:
- <select id="pt" name="pt">
- <option value="none" #if($loc == '')selected="true"#end>No Filter</option>
- <option value="45.17614,-93.87341" #if($loc == '45.17614,-93.87341')selected="true"#end>Buffalo, MN</option>
- <option value="37.7752,-100.0232" #if($loc == '37.7752,-100.0232')selected="true"#end>Dodge City, KS</option>
- <option value="35.0752,-97.032" #if($loc == '35.0752,-97.032')selected="true"#end>Oklahoma City, OK</option>
- <option value="37.7752,-122.4232" #if($loc == '37.7752,-122.4232')selected="true"#end>San Francisco CA</option>
- </select>
- </label>
- <span #annTitle("Add the &d parameter")>Distance (KM): <input id="d" name="d" type="text" size="6" value="#if($dist != '')${dist}#{else}10#end"/></span>
- <input type="hidden" name="sfield" value="store"/>
- <input type="hidden" id="spatialFQ" name="fq" value=""/>
+ #parse("querySpatial.vm")
+ #parse("queryGroup.vm")
</div>
</div>
@@ -44,23 +31,10 @@
<a href="#" onclick='jQuery(this).siblings("pre").toggle(); return false;'>toggle parsed query</a>
<pre style="display:none">$response.response.debug.parsedquery</pre>
#end
+ #set($queryOpts = $request.params.get("queryOpts"))
+ #if($queryOpts && $queryOpts != "")
+ <input type="hidden" name="queryOpts" value="$queryOpts"/>
+ #end
</form>
-<script type="text/javascript">
- $('#query-form').submit(function() {
- if ($("#pt").val() != "none") {
- $("#spatialFQ").val("{!bbox}");
- //return false;
- }
- $fqs = $("#allFQs").val();
- $fqs = $fqs.replace("{!bbox}", "");
- if ($fqs == ''){
- $("#allFQs").remove();
- }
- $("#allFQs").val($fqs);
- //$("#spatialFQ").remove();
- alert($fqs);
- //alert("false");
- return true;
- });
-</script>
+
</div>
Propchange: lucene/dev/branches/docvalues/solr/lib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/lib:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/lib:967125-979432
-/lucene/dev/trunk/solr/lib:1021634-1027393
+/lucene/dev/trunk/solr/lib:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/lib:748824
/lucene/java/branches/lucene_2_9/solr/lib:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/lib:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/lib/commons-httpclient-3.1.jar
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/lib/commons-httpclient-3.1.jar:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/lib/commons-httpclient-3.1.jar:967125-979432
-/lucene/dev/trunk/solr/lib/commons-httpclient-3.1.jar:1021634-1027393
+/lucene/dev/trunk/solr/lib/commons-httpclient-3.1.jar:1021634-1029001
/lucene/solr/branches/newtrunk/solr/lib/commons-httpclient-3.1.jar:924462
/lucene/solr/trunk/lib/commons-httpclient-3.1.jar:922950-923910,923912-925091
Propchange: lucene/dev/branches/docvalues/solr/lib/jcl-over-slf4j-1.5.5.jar
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/lib/jcl-over-slf4j-1.5.5.jar:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/lib/jcl-over-slf4j-1.5.5.jar:967125-979432
-/lucene/dev/trunk/solr/lib/jcl-over-slf4j-1.5.5.jar:1021634-1027393
+/lucene/dev/trunk/solr/lib/jcl-over-slf4j-1.5.5.jar:1021634-1029001
/lucene/solr/branches/newtrunk/solr/lib/jcl-over-slf4j-1.5.5.jar:924462
/lucene/solr/trunk/lib/jcl-over-slf4j-1.5.5.jar:922950-923910,923912-925091
Propchange: lucene/dev/branches/docvalues/solr/site/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/site:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/site:967125-979432
-/lucene/dev/trunk/solr/site:1021634-1027393
+/lucene/dev/trunk/solr/site:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/site:748824
/lucene/java/branches/lucene_2_9/solr/site:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/site:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/src/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/src:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/src:967125-979432
-/lucene/dev/trunk/solr/src:1021634-1027393
+/lucene/dev/trunk/solr/src:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/src:748824
/lucene/java/branches/lucene_2_9/solr/src:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/src:818601-821336
Propchange: lucene/dev/branches/docvalues/solr/src/common/org/apache/solr/common/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/src/common/org/apache/solr/common:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/src/common/org/apache/solr/common:967125-979432
-/lucene/dev/trunk/solr/src/common/org/apache/solr/common:1021634-1027393
+/lucene/dev/trunk/solr/src/common/org/apache/solr/common:1021634-1029001
/lucene/solr/branches/newtrunk/solr/src/common/org/apache/solr/common:924462
/lucene/solr/trunk/src/common/org/apache/solr/common:922950-923910,923912-925091
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java Sat Oct 30 07:37:24 2010
@@ -35,7 +35,7 @@ public class PageTool {
if (rows != null) {
results_per_page = new Integer(rows);
}
-
+ //TODO: Handle group by results
Object docs = response.getValues().get("response");
if (docs != null) {
if (docs instanceof DocSlice) {
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java Sat Oct 30 07:37:24 2010
@@ -20,6 +20,8 @@ package org.apache.solr.schema;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BytesRef;
import org.apache.noggit.CharArr;
+import org.apache.solr.search.MutableValueDouble;
+import org.apache.solr.search.MutableValue;
import org.apache.solr.search.function.ValueSource;
import org.apache.solr.search.function.FieldCacheSource;
import org.apache.solr.search.function.DocValues;
@@ -133,6 +135,23 @@ class SortableDoubleFieldSource extends
public String toString(int doc) {
return description() + '=' + doubleVal(doc);
}
+
+ @Override
+ public ValueFiller getValueFiller() {
+ return new ValueFiller() {
+ private final MutableValueDouble mval = new MutableValueDouble();
+
+ @Override
+ public MutableValue getValue() {
+ return mval;
+ }
+
+ @Override
+ public void fillValue(int doc) {
+ mval.value = doubleVal(doc);
+ }
+ };
+ }
};
}
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java Sat Oct 30 07:37:24 2010
@@ -20,6 +20,8 @@ package org.apache.solr.schema;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BytesRef;
import org.apache.noggit.CharArr;
+import org.apache.solr.search.MutableValueFloat;
+import org.apache.solr.search.MutableValue;
import org.apache.solr.search.function.ValueSource;
import org.apache.solr.search.function.FieldCacheSource;
import org.apache.solr.search.function.DocValues;
@@ -133,6 +135,23 @@ class SortableFloatFieldSource extends F
public String toString(int doc) {
return description() + '=' + floatVal(doc);
}
+
+ @Override
+ public ValueFiller getValueFiller() {
+ return new ValueFiller() {
+ private final MutableValueFloat mval = new MutableValueFloat();
+
+ @Override
+ public MutableValue getValue() {
+ return mval;
+ }
+
+ @Override
+ public void fillValue(int doc) {
+ mval.value = floatVal(doc);
+ }
+ };
+ }
};
}
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java Sat Oct 30 07:37:24 2010
@@ -20,6 +20,8 @@ package org.apache.solr.schema;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BytesRef;
import org.apache.noggit.CharArr;
+import org.apache.solr.search.MutableValueInt;
+import org.apache.solr.search.MutableValue;
import org.apache.solr.search.function.ValueSource;
import org.apache.solr.search.function.FieldCacheSource;
import org.apache.solr.search.function.DocValues;
@@ -137,6 +139,24 @@ class SortableIntFieldSource extends Fie
public String toString(int doc) {
return description() + '=' + intVal(doc);
}
+
+ @Override
+ public ValueFiller getValueFiller() {
+ return new ValueFiller() {
+ private final MutableValueInt mval = new MutableValueInt();
+
+ @Override
+ public MutableValue getValue() {
+ return mval;
+ }
+
+ @Override
+ public void fillValue(int doc) {
+ mval.value = intVal(doc);
+ }
+ };
+ }
+
};
}
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java Sat Oct 30 07:37:24 2010
@@ -20,6 +20,8 @@ package org.apache.solr.schema;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BytesRef;
import org.apache.noggit.CharArr;
+import org.apache.solr.search.MutableValueLong;
+import org.apache.solr.search.MutableValue;
import org.apache.solr.search.function.ValueSource;
import org.apache.solr.search.function.FieldCacheSource;
import org.apache.solr.search.function.DocValues;
@@ -134,6 +136,23 @@ class SortableLongFieldSource extends Fi
public String toString(int doc) {
return description() + '=' + longVal(doc);
}
+
+ @Override
+ public ValueFiller getValueFiller() {
+ return new ValueFiller() {
+ private final MutableValueLong mval = new MutableValueLong();
+
+ @Override
+ public MutableValue getValue() {
+ return mval;
+ }
+
+ @Override
+ public void fillValue(int doc) {
+ mval.value = longVal(doc);
+ }
+ };
+ }
};
}
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java Sat Oct 30 07:37:24 2010
@@ -173,6 +173,33 @@ class TopGroupCollector extends GroupCol
@Override
public void collect(int doc) throws IOException {
matches++;
+
+ // if orderedGroups != null, then we already have collected N groups and
+ // can short circuit by comparing this document to the smallest group
+ // without having to even find what group this document belongs to.
+ // Even if this document belongs to a group in the top N, we know that
+ // we don't have to update that group.
+ //
+ // Downside: if the number of unique groups is very low, this is
+ // wasted effort as we will most likely be updating an existing group.
+ if (orderedGroups != null) {
+ for (int i = 0;; i++) {
+ final int c = reversed[i] * comparators[i].compareBottom(doc);
+ if (c < 0) {
+ // Definitely not competitive. So don't even bother to continue
+ return;
+ } else if (c > 0) {
+ // Definitely competitive.
+ break;
+ } else if (i == comparators.length - 1) {
+ // Here c=0. If we're at the last comparator, this doc is not
+ // competitive, since docs are visited in doc Id order, which means
+ // this doc cannot compete with any other document in the queue.
+ return;
+ }
+ }
+ }
+
filler.fillValue(doc);
SearchGroup group = groupMap.get(mval);
if (group == null) {
@@ -187,29 +214,14 @@ class TopGroupCollector extends GroupCol
for (FieldComparator fc : comparators)
fc.copy(sg.comparatorSlot, doc);
groupMap.put(sg.groupValue, sg);
+ if (groupMap.size() == nGroups) {
+ buildSet();
+ }
return;
}
- if (orderedGroups == null) {
- buildSet();
- }
-
-
- for (int i = 0;; i++) {
- final int c = reversed[i] * comparators[i].compareBottom(doc);
- if (c < 0) {
- // Definitely not competitive.
- return;
- } else if (c > 0) {
- // Definitely competitive.
- break;
- } else if (i == comparators.length - 1) {
- // Here c=0. If we're at the last comparator, this doc is not
- // competitive, since docs are visited in doc Id order, which means
- // this doc cannot compete with any other document in the queue.
- return;
- }
- }
+ // we already tested that the document is competitive, so replace
+ // the smallest group with this new group.
// remove current smallest group
SearchGroup smallest = orderedGroups.pollLast();
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java Sat Oct 30 07:37:24 2010
@@ -17,32 +17,33 @@
package org.apache.solr.search;
-import org.apache.lucene.document.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.FieldSelector;
+import org.apache.lucene.document.FieldSelectorResult;
import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.OpenBitSet;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.request.UnInvertedField;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
-import org.apache.solr.request.UnInvertedField;
-import org.apache.lucene.util.OpenBitSet;
+import org.apache.solr.search.function.ValueSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.URL;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.solr.search.function.ValueSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
* SolrIndexSearcher adds schema awareness and caching functionality
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocValues.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocValues.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocValues.java Sat Oct 30 07:37:24 2010
@@ -46,6 +46,18 @@ public abstract class DocValues {
public double doubleVal(int doc) { throw new UnsupportedOperationException(); }
// TODO: should we make a termVal, returns BytesRef?
public String strVal(int doc) { throw new UnsupportedOperationException(); }
+
+ /**
+ * @param doc The doc to retrieve to sort ordinal for
+ * @return the sort ordinal for the specified doc
+ * TODO: Maybe we can just use intVal for this...
+ */
+ public int ordVal(int doc) { throw new UnsupportedOperationException(); }
+
+ /**
+ * @return the number of unique sort ordinals this instance has
+ */
+ public int numOrd() { throw new UnsupportedOperationException(); }
public abstract String toString(int doc);
/** @lucene.experimental */
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java Sat Oct 30 07:37:24 2010
@@ -74,6 +74,14 @@ public class OrdFieldSource extends Valu
return (double)termsIndex.getOrd(doc);
}
+ public int ordVal(int doc) {
+ return termsIndex.getOrd(doc);
+ }
+
+ public int numOrd() {
+ return termsIndex.numOrd();
+ }
+
public String strVal(int doc) {
// the string value of the ordinal, not the string itself
return Integer.toString(termsIndex.getOrd(doc));
Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java Sat Oct 30 07:37:24 2010
@@ -73,6 +73,14 @@ public class ReverseOrdFieldSource exten
return (long)(end - sindex.getOrd(doc));
}
+ public int ordVal(int doc) {
+ return (end - sindex.getOrd(doc));
+ }
+
+ public int numOrd() {
+ return end;
+ }
+
public double doubleVal(int doc) {
return (double)(end - sindex.getOrd(doc));
}
Propchange: lucene/dev/branches/docvalues/solr/src/maven/solr-core-pom.xml.template
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/src/maven/solr-core-pom.xml.template:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/src/maven/solr-core-pom.xml.template:967125-979432
-/lucene/dev/trunk/solr/src/maven/solr-core-pom.xml.template:1021634-1027393
+/lucene/dev/trunk/solr/src/maven/solr-core-pom.xml.template:1021634-1029001
/lucene/solr/branches/newtrunk/solr/src/maven/solr-core-pom.xml.template:924462
/lucene/solr/trunk/src/maven/solr-core-pom.xml.template:922950-923910,923912-925091
Propchange: lucene/dev/branches/docvalues/solr/src/maven/solr-solrj-pom.xml.template
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/src/maven/solr-solrj-pom.xml.template:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/src/maven/solr-solrj-pom.xml.template:967125-979432
-/lucene/dev/trunk/solr/src/maven/solr-solrj-pom.xml.template:1021634-1027393
+/lucene/dev/trunk/solr/src/maven/solr-solrj-pom.xml.template:1021634-1029001
/lucene/solr/branches/newtrunk/solr/src/maven/solr-solrj-pom.xml.template:924462
/lucene/solr/trunk/src/maven/solr-solrj-pom.xml.template:922950-923910,923912-925091
Propchange: lucene/dev/branches/docvalues/solr/src/solrj/org/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/src/solrj/org:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/src/solrj/org:967125-979432
-/lucene/dev/trunk/solr/src/solrj/org:1021634-1027393
+/lucene/dev/trunk/solr/src/solrj/org:1021634-1029001
/lucene/solr/branches/newtrunk/solr/src/solrj/org:924462
/lucene/solr/trunk/src/solrj/org:922950-923910,923912-925091
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java Sat Oct 30 07:37:24 2010
@@ -37,11 +37,11 @@ public class TestGroupingSearch extends
@Test
public void testGroupingGroupSortingScore_basic() {
- assertU(add(doc("id", "1","name", "author1", "title", "a book title")));
- assertU(add(doc("id", "2","name", "author1", "title", "the title")));
- assertU(add(doc("id", "3","name", "author2", "title", "a book title")));
- assertU(add(doc("id", "4","name", "author2", "title", "title")));
- assertU(add(doc("id", "5","name", "author3", "title", "the title of a title")));
+ assertU(add(doc("id", "1","name", "author1", "title", "a book title", "group_si", "1")));
+ assertU(add(doc("id", "2","name", "author1", "title", "the title", "group_si", "2")));
+ assertU(add(doc("id", "3","name", "author2", "title", "a book title", "group_si", "1")));
+ assertU(add(doc("id", "4","name", "author2", "title", "title", "group_si", "2")));
+ assertU(add(doc("id", "5","name", "author3", "title", "the title of a title", "group_si", "1")));
assertU(commit());
assertQ(req("q","title:title", "group", "true", "group.field","name")
@@ -63,6 +63,19 @@ public class TestGroupingSearch extends
,"//arr[@name='groups']/lst[3]/result[@numFound='1']"
,"//arr[@name='groups']/lst[3]/result/doc/*[@name='id'][.='5']"
);
+
+ assertQ(req("q","title:title", "group", "true", "group.field","group_si")
+ ,"//lst[@name='grouped']/lst[@name='group_si']"
+ ,"*[count(//arr[@name='groups']/lst) = 2]"
+
+ ,"//arr[@name='groups']/lst[1]/int[@name='groupValue'][.='2']"
+ ,"//arr[@name='groups']/lst[1]/result[@numFound='2']"
+ ,"//arr[@name='groups']/lst[1]/result/doc/*[@name='id'][.='4']"
+
+ ,"//arr[@name='groups']/lst[2]/int[@name='groupValue'][.='1']"
+ ,"//arr[@name='groups']/lst[2]/result[@numFound='3']"
+ ,"//arr[@name='groups']/lst[2]/result/doc/*[@name='id'][.='5']"
+ );
}
@Test
Propchange: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/client:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/src/test/org/apache/solr/client:967125-979432
-/lucene/dev/trunk/solr/src/test/org/apache/solr/client:1021634-1027393
+/lucene/dev/trunk/solr/src/test/org/apache/solr/client:1021634-1029001
/lucene/solr/branches/newtrunk/solr/src/test/org/apache/solr/client:924462
/lucene/solr/trunk/src/test/org/apache/solr/client:922950-923910,923912-925091
Propchange: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,5 +1,5 @@
/lucene/dev/branches/branch_3x/solr/src/webapp/src/org/apache/solr/client/solrj/embedded:949730,961612,979161,980654,982195,987811,988512,1025544,1026614
/lucene/dev/branches/preflexfixes/solr/src/webapp/src/org/apache/solr/client/solrj/embedded:967125-979432
-/lucene/dev/trunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded:1021634-1027393
+/lucene/dev/trunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded:1021634-1029001
/lucene/solr/branches/newtrunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded:924462
/lucene/solr/trunk/src/webapp/src/org/apache/solr/client/solrj/embedded:922950-923910,923912-925091
Propchange: lucene/dev/branches/docvalues/solr/testlogging.properties
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
/lucene/dev/branches/branch_3x/solr/testlogging.properties:949730,961612,979161,980654,982195,987811,988512
/lucene/dev/branches/preflexfixes/solr/testlogging.properties:967125-979432
-/lucene/dev/trunk/solr/testlogging.properties:1021634-1027393
+/lucene/dev/trunk/solr/testlogging.properties:1021634-1029001
/lucene/java/branches/lucene_2_4/solr/testlogging.properties:748824
/lucene/java/branches/lucene_2_9/solr/testlogging.properties:817269-818600,825998,829134,829881,831036,896850,909334
/lucene/java/branches/lucene_2_9_back_compat_tests/solr/testlogging.properties:818601-821336