mirror of https://github.com/apache/lucene.git
detect if cat path uses the delimiter; fix test
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1451202 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
29bc4ed434
commit
7c3f4ce119
|
@ -121,6 +121,14 @@ public class CategoryPath implements Comparable<CategoryPath> {
|
||||||
return length - other.length;
|
return length - other.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void noDelimiter(char[] buf, int offset, int len, char delimiter) {
|
||||||
|
for(int idx=0;idx<len;idx++) {
|
||||||
|
if (buf[offset+idx] == delimiter) {
|
||||||
|
throw new IllegalArgumentException("delimiter character U+" + Integer.toHexString(delimiter) + " appears in path");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies the path components to the given {@code char[]}, starting at index
|
* Copies the path components to the given {@code char[]}, starting at index
|
||||||
* {@code start}. {@code delimiter} is copied between the path components.
|
* {@code start}. {@code delimiter} is copied between the path components.
|
||||||
|
@ -141,10 +149,12 @@ public class CategoryPath implements Comparable<CategoryPath> {
|
||||||
for (int i = 0; i < upto; i++) {
|
for (int i = 0; i < upto; i++) {
|
||||||
int len = components[i].length();
|
int len = components[i].length();
|
||||||
components[i].getChars(0, len, buf, idx);
|
components[i].getChars(0, len, buf, idx);
|
||||||
|
noDelimiter(buf, idx, len, delimiter);
|
||||||
idx += len;
|
idx += len;
|
||||||
buf[idx++] = delimiter;
|
buf[idx++] = delimiter;
|
||||||
}
|
}
|
||||||
components[upto].getChars(0, components[upto].length(), buf, idx);
|
components[upto].getChars(0, components[upto].length(), buf, idx);
|
||||||
|
noDelimiter(buf, idx, components[upto].length(), delimiter);
|
||||||
|
|
||||||
return idx + components[upto].length() - start;
|
return idx + components[upto].length() - start;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.apache.lucene.search.similarities.DefaultSimilarity;
|
||||||
import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper;
|
import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper;
|
||||||
import org.apache.lucene.search.similarities.Similarity;
|
import org.apache.lucene.search.similarities.Similarity;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
|
|
||||||
public class TestDemoFacets extends FacetTestCase {
|
public class TestDemoFacets extends FacetTestCase {
|
||||||
|
|
||||||
|
@ -219,4 +220,27 @@ public class TestDemoFacets extends FacetTestCase {
|
||||||
dir.close();
|
dir.close();
|
||||||
taxoDir.close();
|
taxoDir.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testLabelWithDelimiter() throws Exception {
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
Directory taxoDir = newDirectory();
|
||||||
|
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
|
||||||
|
DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE);
|
||||||
|
|
||||||
|
FacetFields facetFields = new FacetFields(taxoWriter);
|
||||||
|
|
||||||
|
Document doc = new Document();
|
||||||
|
doc.add(newTextField("field", "text", Field.Store.NO));
|
||||||
|
BytesRef br = new BytesRef(new byte[] {(byte) 0xee, (byte) 0x92, (byte) 0xaa, (byte) 0xef, (byte) 0x9d, (byte) 0x89});
|
||||||
|
facetFields.addFields(doc, Collections.singletonList(new CategoryPath("dim/" + br.utf8ToString(), '/')));
|
||||||
|
try {
|
||||||
|
writer.addDocument(doc);
|
||||||
|
} catch (IllegalArgumentException iae) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
writer.close();
|
||||||
|
taxoWriter.close();
|
||||||
|
dir.close();
|
||||||
|
taxoDir.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.apache.lucene.document.Field;
|
||||||
import org.apache.lucene.document.StringField;
|
import org.apache.lucene.document.StringField;
|
||||||
import org.apache.lucene.facet.FacetTestCase;
|
import org.apache.lucene.facet.FacetTestCase;
|
||||||
import org.apache.lucene.facet.index.FacetFields;
|
import org.apache.lucene.facet.index.FacetFields;
|
||||||
|
import org.apache.lucene.facet.params.FacetIndexingParams;
|
||||||
import org.apache.lucene.facet.params.FacetSearchParams;
|
import org.apache.lucene.facet.params.FacetSearchParams;
|
||||||
import org.apache.lucene.facet.search.DrillSideways.DrillSidewaysResult;
|
import org.apache.lucene.facet.search.DrillSideways.DrillSidewaysResult;
|
||||||
import org.apache.lucene.facet.taxonomy.CategoryPath;
|
import org.apache.lucene.facet.taxonomy.CategoryPath;
|
||||||
|
@ -58,6 +59,7 @@ import org.apache.lucene.search.TermQuery;
|
||||||
import org.apache.lucene.search.TopDocs;
|
import org.apache.lucene.search.TopDocs;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.util.Bits;
|
import org.apache.lucene.util.Bits;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.FixedBitSet;
|
import org.apache.lucene.util.FixedBitSet;
|
||||||
import org.apache.lucene.util.InfoStream;
|
import org.apache.lucene.util.InfoStream;
|
||||||
import org.apache.lucene.util._TestUtil;
|
import org.apache.lucene.util._TestUtil;
|
||||||
|
@ -374,7 +376,15 @@ public class TestDrillSideways extends FacetTestCase {
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
Set<String> values = new HashSet<String>();
|
Set<String> values = new HashSet<String>();
|
||||||
while (values.size() < valueCount) {
|
while (values.size() < valueCount) {
|
||||||
String s = _TestUtil.randomRealisticUnicodeString(random());
|
String s;
|
||||||
|
while (true) {
|
||||||
|
s = _TestUtil.randomRealisticUnicodeString(random());
|
||||||
|
// We cannot include this character else the label
|
||||||
|
// is silently truncated:
|
||||||
|
if (s.indexOf(FacetIndexingParams.DEFAULT_FACET_DELIM_CHAR) == -1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
//String s = _TestUtil.randomSimpleString(random());
|
//String s = _TestUtil.randomSimpleString(random());
|
||||||
if (s.length() > 0) {
|
if (s.length() > 0) {
|
||||||
values.add(s);
|
values.add(s);
|
||||||
|
@ -443,7 +453,7 @@ public class TestDrillSideways extends FacetTestCase {
|
||||||
paths.add(new CategoryPath("dim" + dim, dimValues[dim][dimValue]));
|
paths.add(new CategoryPath("dim" + dim, dimValues[dim][dimValue]));
|
||||||
doc.add(new StringField("dim" + dim, dimValues[dim][dimValue], Field.Store.YES));
|
doc.add(new StringField("dim" + dim, dimValues[dim][dimValue], Field.Store.YES));
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
System.out.println(" dim" + dim + "=" + dimValues[dim][dimValue]);
|
System.out.println(" dim" + dim + "=" + new BytesRef(dimValues[dim][dimValue]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int dimValue2 = rawDoc.dims2[dim];
|
int dimValue2 = rawDoc.dims2[dim];
|
||||||
|
@ -451,7 +461,7 @@ public class TestDrillSideways extends FacetTestCase {
|
||||||
paths.add(new CategoryPath("dim" + dim, dimValues[dim][dimValue2]));
|
paths.add(new CategoryPath("dim" + dim, dimValues[dim][dimValue2]));
|
||||||
doc.add(new StringField("dim" + dim, dimValues[dim][dimValue2], Field.Store.YES));
|
doc.add(new StringField("dim" + dim, dimValues[dim][dimValue2], Field.Store.YES));
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
System.out.println(" dim" + dim + "=" + dimValues[dim][dimValue2]);
|
System.out.println(" dim" + dim + "=" + new BytesRef(dimValues[dim][dimValue2]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -541,7 +551,11 @@ public class TestDrillSideways extends FacetTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
System.out.println(" dim" + dim + "=" + Arrays.toString(drillDowns[dim]));
|
BytesRef[] values = new BytesRef[drillDowns[dim].length];
|
||||||
|
for(int i=0;i<values.length;i++) {
|
||||||
|
values[i] = new BytesRef(drillDowns[dim][i]);
|
||||||
|
}
|
||||||
|
System.out.println(" dim" + dim + "=" + Arrays.toString(values));
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -792,7 +806,7 @@ public class TestDrillSideways extends FacetTestCase {
|
||||||
for(FacetResultNode childNode : fr.getFacetResultNode().subResults) {
|
for(FacetResultNode childNode : fr.getFacetResultNode().subResults) {
|
||||||
actualValues.put(childNode.label.components[1], (int) childNode.value);
|
actualValues.put(childNode.label.components[1], (int) childNode.value);
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
System.out.println(" " + childNode.label.components[1] + ": " + (int) childNode.value);
|
System.out.println(" " + new BytesRef(childNode.label.components[1]) + ": " + (int) childNode.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,7 +819,7 @@ public class TestDrillSideways extends FacetTestCase {
|
||||||
String value = dimValues[dim][i];
|
String value = dimValues[dim][i];
|
||||||
if (expected.counts[dim][i] != 0) {
|
if (expected.counts[dim][i] != 0) {
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
System.out.println(" " + value + ": " + expected.counts[dim][i]);
|
System.out.println(" " + new BytesRef(value) + ": " + expected.counts[dim][i]);
|
||||||
}
|
}
|
||||||
assertTrue(actualValues.containsKey(value));
|
assertTrue(actualValues.containsKey(value));
|
||||||
assertEquals(expected.counts[dim][i], actualValues.get(value).intValue());
|
assertEquals(expected.counts[dim][i], actualValues.get(value).intValue());
|
||||||
|
|
Loading…
Reference in New Issue