You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2015/04/08 18:07:03 UTC
svn commit: r1672113 - in /lucene/dev/branches/lucene_solr_5_1: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/util/
lucene/core/src/test/org/apache/lucene/util/ lucene/demo/
lucene/demo/src/test/org/apache/lucene/demo/facet/ solr/ solr...
Author: romseygeek
Date: Wed Apr 8 16:07:02 2015
New Revision: 1672113
URL: http://svn.apache.org/r1672113
Log:
SOLR-1387: Move contains() method to SimpleFacets
Modified:
lucene/dev/branches/lucene_solr_5_1/ (props changed)
lucene/dev/branches/lucene_solr_5_1/lucene/ (props changed)
lucene/dev/branches/lucene_solr_5_1/lucene/core/ (props changed)
lucene/dev/branches/lucene_solr_5_1/lucene/core/src/java/org/apache/lucene/util/StringHelper.java
lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/util/TestStringHelper.java
lucene/dev/branches/lucene_solr_5_1/lucene/demo/ (props changed)
lucene/dev/branches/lucene_solr_5_1/lucene/demo/src/test/org/apache/lucene/demo/facet/TestSimpleFacetsExample.java
lucene/dev/branches/lucene_solr_5_1/solr/ (props changed)
lucene/dev/branches/lucene_solr_5_1/solr/core/ (props changed)
lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java
lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
lucene/dev/branches/lucene_solr_5_1/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/java/org/apache/lucene/util/StringHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/java/org/apache/lucene/util/StringHelper.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/java/org/apache/lucene/util/StringHelper.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/java/org/apache/lucene/util/StringHelper.java Wed Apr 8 16:07:02 2015
@@ -22,7 +22,6 @@ import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
-import java.util.Locale;
import java.util.Properties;
/**
@@ -134,35 +133,7 @@ public abstract class StringHelper {
public static boolean endsWith(BytesRef ref, BytesRef suffix) {
return sliceEquals(ref, suffix, ref.length - suffix.length);
}
-
- /**
- * Returns <code>true</code> iff the ref contains the given slice. Otherwise
- * <code>false</code>.
- *
- * @param ref
- * the {@link BytesRef} to test
- * @param slice
- * the slice to look for
- * @param ignoreCase
- * whether the comparison should be case-insensitive
- * @return Returns <code>true</code> iff the ref contains the given slice.
- * Otherwise <code>false</code>.
- */
- public static boolean contains(BytesRef ref, BytesRef slice, boolean ignoreCase) {
- if (ignoreCase) {
- String s1 = ref.utf8ToString();
- String s2 = slice.utf8ToString();
- return s1.toLowerCase(Locale.ENGLISH).contains(s2.toLowerCase(Locale.ENGLISH));
- } else {
- for (int pos = 0; pos <= ref.length - slice.length; ++pos) {
- if (sliceEquals(ref, slice, pos)) {
- return true;
- }
- }
- }
- return false;
- }
-
+
private static boolean sliceEquals(BytesRef sliceToTest, BytesRef other, int pos) {
if (pos < 0 || sliceToTest.length - pos < other.length) {
return false;
Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/util/TestStringHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/util/TestStringHelper.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/util/TestStringHelper.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/util/TestStringHelper.java Wed Apr 8 16:07:02 2015
@@ -56,36 +56,6 @@ public class TestStringHelper extends Lu
assertTrue(StringHelper.endsWith(ref, slice));
}
- public void testContainsAtStart() {
- BytesRef ref = new BytesRef("foobar");
- BytesRef slice = new BytesRef("foo");
- assertTrue(StringHelper.contains(ref, slice, false));
- }
-
- public void testContains() {
- BytesRef ref = new BytesRef("foobar");
- BytesRef slice = new BytesRef("ooba");
- assertTrue(StringHelper.contains(ref, slice, false));
- }
-
- public void testContainsAtEnd() {
- BytesRef ref = new BytesRef("foobar");
- BytesRef slice = new BytesRef("bar");
- assertTrue(StringHelper.contains(ref, slice, false));
- }
-
- public void testContainsWhole() {
- BytesRef ref = new BytesRef("foobar");
- BytesRef slice = new BytesRef("foobar");
- assertTrue(StringHelper.contains(ref, slice, false));
- }
-
- public void testContainsIgnoreCase() {
- BytesRef ref = new BytesRef("FooBar");
- BytesRef slice = new BytesRef("bar");
- assertTrue(StringHelper.contains(ref, slice, true));
- }
-
public void testMurmurHash3() throws Exception {
// Hashes computed using murmur3_32 from https://code.google.com/p/pyfasthash
assertEquals(0xf6a5c420, StringHelper.murmurhash3_x86_32(new BytesRef("foo"), 0));
Modified: lucene/dev/branches/lucene_solr_5_1/lucene/demo/src/test/org/apache/lucene/demo/facet/TestSimpleFacetsExample.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/demo/src/test/org/apache/lucene/demo/facet/TestSimpleFacetsExample.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/demo/src/test/org/apache/lucene/demo/facet/TestSimpleFacetsExample.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/demo/src/test/org/apache/lucene/demo/facet/TestSimpleFacetsExample.java Wed Apr 8 16:07:02 2015
@@ -17,12 +17,12 @@ package org.apache.lucene.demo.facet;
* limitations under the License.
*/
-import java.util.List;
-
import org.apache.lucene.facet.FacetResult;
import org.apache.lucene.util.LuceneTestCase;
import org.junit.Test;
+import java.util.List;
+
public class TestSimpleFacetsExample extends LuceneTestCase {
@Test
@@ -54,4 +54,5 @@ public class TestSimpleFacetsExample ext
assertEquals("dim=Publish Date path=[] value=5 childCount=3\n 2010 (2)\n 2012 (2)\n 1999 (1)\n", result.get(0).toString());
assertEquals("dim=Author path=[] value=2 childCount=2\n Bob (1)\n Lisa (1)\n", result.get(1).toString());
}
+
}
Modified: lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java Wed Apr 8 16:07:02 2015
@@ -17,11 +17,8 @@ package org.apache.solr.request;
* limitations under the License.
*/
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.DocValues;
+import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.MultiDocValues.MultiSortedDocValues;
import org.apache.lucene.index.MultiDocValues.MultiSortedSetDocValues;
import org.apache.lucene.index.MultiDocValues.OrdinalMap;
@@ -34,7 +31,6 @@ import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
import org.apache.lucene.util.CharsRefBuilder;
import org.apache.lucene.util.LongValues;
-import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.util.NamedList;
@@ -44,6 +40,9 @@ import org.apache.solr.search.DocSet;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.util.LongPriorityQueue;
+import java.io.IOException;
+import java.util.List;
+
/**
* Computes term facets for docvalues field (single or multivalued).
* <p>
@@ -99,8 +98,6 @@ public class DocValuesFacets {
prefixRef.copyChars(prefix);
}
- final BytesRef containsBR = contains != null ? new BytesRef(contains) : null;
-
int startTermIndex, endTermIndex;
if (prefix!=null) {
startTermIndex = (int) si.lookupTerm(prefixRef.get());
@@ -173,9 +170,9 @@ public class DocValuesFacets {
int min=mincount-1; // the smallest value in the top 'N' values
for (int i=(startTermIndex==-1)?1:0; i<nTerms; i++) {
int c = counts[i];
- if (containsBR != null) {
+ if (contains != null) {
final BytesRef term = si.lookupOrd(startTermIndex+i);
- if (!StringHelper.contains(term, containsBR, ignoreCase)) {
+ if (!SimpleFacets.contains(term.utf8ToString(), contains, ignoreCase)) {
continue;
}
}
@@ -212,7 +209,7 @@ public class DocValuesFacets {
} else {
// add results in index order
int i=(startTermIndex==-1)?1:0;
- if (mincount<=0 && containsBR == null) {
+ if (mincount<=0 && contains == null) {
// if mincount<=0 and we're not examining the values for contains, then
// we won't discard any terms and we know exactly where to start.
i+=off;
@@ -223,9 +220,9 @@ public class DocValuesFacets {
int c = counts[i];
if (c<mincount) continue;
BytesRef term = null;
- if (containsBR != null) {
+ if (contains != null) {
term = si.lookupOrd(startTermIndex+i);
- if (!StringHelper.contains(term, containsBR, ignoreCase)) {
+ if (!SimpleFacets.contains(term.utf8ToString(), contains, ignoreCase)) {
continue;
}
}
Modified: lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java Wed Apr 8 16:07:02 2015
@@ -17,12 +17,8 @@
package org.apache.solr.request;
-import java.io.IOException;
-import java.util.*;
-import java.util.concurrent.*;
-
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.DocValues;
+import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.search.DocIdSet;
@@ -32,7 +28,6 @@ import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
import org.apache.lucene.util.CharsRefBuilder;
import org.apache.lucene.util.PriorityQueue;
-import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.FacetParams;
@@ -42,6 +37,16 @@ import org.apache.solr.search.DocSet;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.util.BoundedTreeSet;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionService;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.Future;
+
class PerSegmentSingleValuedFaceting {
@@ -55,7 +60,7 @@ class PerSegmentSingleValuedFaceting {
boolean missing;
String sort;
String prefix;
- BytesRef containsBR;
+ String contains;
boolean ignoreCase;
Filter baseSet;
@@ -72,7 +77,7 @@ class PerSegmentSingleValuedFaceting {
this.missing = missing;
this.sort = sort;
this.prefix = prefix;
- this.containsBR = contains != null ? new BytesRef(contains) : null;
+ this.contains = contains;
this.ignoreCase = ignoreCase;
}
@@ -180,7 +185,7 @@ class PerSegmentSingleValuedFaceting {
SegFacet seg = queue.top();
// if facet.contains specified, only actually collect the count if substring contained
- boolean collect = containsBR == null || StringHelper.contains(seg.tempBR, containsBR, ignoreCase);
+ boolean collect = contains == null || SimpleFacets.contains(seg.tempBR.utf8ToString(), contains, ignoreCase);
// we will normally end up advancing the term enum for this segment
// while still using "val", so we need to make a copy since the BytesRef
Modified: lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/SimpleFacets.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/solr/core/src/java/org/apache/solr/request/SimpleFacets.java Wed Apr 8 16:07:02 2015
@@ -17,6 +17,7 @@
package org.apache.solr.request;
+import org.apache.commons.lang.StringUtils;
import org.apache.lucene.index.Fields;
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
@@ -143,6 +144,25 @@ public class SimpleFacets {
this.rb = rb;
}
+ /**
+ * Returns <code>true</code> if a String contains the given substring. Otherwise
+ * <code>false</code>.
+ *
+ * @param ref
+ * the {@link String} to test
+ * @param substring
+ * the substring to look for
+ * @param ignoreCase
+ * whether the comparison should be case-insensitive
+ * @return Returns <code>true</code> iff the String contains the given substring.
+ * Otherwise <code>false</code>.
+ */
+ public static boolean contains(String ref, String substring, boolean ignoreCase) {
+ if (ignoreCase)
+ return StringUtils.containsIgnoreCase(ref, substring);
+ return StringUtils.contains(ref, substring);
+ }
+
protected void parseParams(String type, String param) throws SyntaxError, IOException {
localParams = QueryParsing.getLocalParams(param, req.getParams());
@@ -494,7 +514,6 @@ public class SimpleFacets {
}
BytesRef prefixBytesRef = prefix != null ? new BytesRef(prefix) : null;
- BytesRef containsRef = contains != null ? new BytesRef(contains) : null;
final TermGroupFacetCollector collector = TermGroupFacetCollector.createTermGroupFacetCollector(groupField, field, multiToken, prefixBytesRef, 128);
SchemaField sf = searcher.getSchema().getFieldOrNull(groupField);
@@ -526,7 +545,7 @@ public class SimpleFacets {
= result.getFacetEntries(offset, limit < 0 ? Integer.MAX_VALUE : limit);
for (TermGroupFacetCollector.FacetEntry facetEntry : scopedEntries) {
//:TODO:can we do contains earlier than this to make it more efficient?
- if (containsRef != null && !StringHelper.contains(facetEntry.getValue(), containsRef, ignoreCase)) {
+ if (contains != null && !contains(facetEntry.getValue().utf8ToString(), contains, ignoreCase)) {
continue;
}
facetFieldType.indexedToReadable(facetEntry.getValue(), charsRef);
@@ -730,12 +749,6 @@ public class SimpleFacets {
String indexedPrefix = ft.toInternal(prefix);
prefixTermBytes = new BytesRef(indexedPrefix);
}
-
- BytesRef containsTermBytes = null;
- if (contains != null) {
- String indexedContains = ft.toInternal(contains);
- containsTermBytes = new BytesRef(indexedContains);
- }
Fields fields = r.fields();
Terms terms = fields==null ? null : fields.terms(field);
@@ -769,7 +782,7 @@ public class SimpleFacets {
if (prefixTermBytes != null && !StringHelper.startsWith(term, prefixTermBytes))
break;
- if (containsTermBytes == null || StringHelper.contains(term, containsTermBytes, ignoreCase)) {
+ if (contains == null || contains(term.utf8ToString(), contains, ignoreCase)) {
int df = termsEnum.docFreq();
// If we are sorting, we can use df>min (rather than >=) since we
Modified: lucene/dev/branches/lucene_solr_5_1/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=1672113&r1=1672112&r2=1672113&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java Wed Apr 8 16:07:02 2015
@@ -2258,4 +2258,24 @@ public class SimpleFacetsTest extends So
400);
}
+ public void testContainsAtStart() {
+ assertTrue(SimpleFacets.contains("foobar", "foo", false));
+ }
+
+ public void testContains() {
+ assertTrue(SimpleFacets.contains("foobar", "ooba", false));
+ }
+
+ public void testContainsAtEnd() {
+ assertTrue(SimpleFacets.contains("foobar", "bar", false));
+ }
+
+ public void testContainsWhole() {
+ assertTrue(SimpleFacets.contains("foobar", "foobar", false));
+ }
+
+ public void testContainsIgnoreCase() {
+ assertTrue(SimpleFacets.contains("FooBar", "bar", true));
+ }
+
}