nested path to be represented as bytes as well as string
This commit is contained in:
parent
2950799243
commit
14678a91ab
|
@ -118,8 +118,6 @@ public interface FieldMapper<T> {
|
|||
|
||||
Names names();
|
||||
|
||||
// LUCENE 4 UPGRADE Consider replacing these all with fieldType() and letting consumer pick and choose
|
||||
|
||||
FieldType fieldType();
|
||||
|
||||
float boost();
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.apache.lucene.document.Field;
|
|||
import org.apache.lucene.index.IndexableField;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.ElasticSearchIllegalStateException;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
|
||||
|
@ -280,7 +281,8 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
|||
|
||||
private final Nested nested;
|
||||
|
||||
private final String nestedTypePath;
|
||||
private final String nestedTypePathAsString;
|
||||
private final BytesRef nestedTypePathAsBytes;
|
||||
|
||||
private final Filter nestedTypeFilter;
|
||||
|
||||
|
@ -304,8 +306,9 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
|||
if (mappers != null) {
|
||||
this.mappers = copyOf(mappers);
|
||||
}
|
||||
this.nestedTypePath = "__" + fullPath;
|
||||
this.nestedTypeFilter = new TermFilter(new Term(TypeFieldMapper.NAME, nestedTypePath));
|
||||
this.nestedTypePathAsString = "__" + fullPath;
|
||||
this.nestedTypePathAsBytes = new BytesRef(nestedTypePathAsString);
|
||||
this.nestedTypeFilter = new TermFilter(new Term(TypeFieldMapper.NAME, nestedTypePathAsBytes));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -377,8 +380,12 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
|||
return this.fullPath;
|
||||
}
|
||||
|
||||
public String nestedTypePath() {
|
||||
return nestedTypePath;
|
||||
public BytesRef nestedTypePathAsBytes() {
|
||||
return nestedTypePathAsBytes;
|
||||
}
|
||||
|
||||
public String nestedTypePathAsString() {
|
||||
return nestedTypePathAsString;
|
||||
}
|
||||
|
||||
public final Dynamic dynamic() {
|
||||
|
@ -428,7 +435,7 @@ public class ObjectMapper implements Mapper, AllFieldMapper.IncludeInAll {
|
|||
// the type of the nested doc starts with __, so we can identify that its a nested one in filters
|
||||
// note, we don't prefix it with the type of the doc since it allows us to execute a nested query
|
||||
// across types (for example, with similar nested objects)
|
||||
nestedDoc.add(new Field(TypeFieldMapper.NAME, nestedTypePath, Field.Store.NO, Field.Index.NOT_ANALYZED));
|
||||
nestedDoc.add(new Field(TypeFieldMapper.NAME, nestedTypePathAsString, Field.Store.NO, Field.Index.NOT_ANALYZED));
|
||||
restoreDoc = context.switchDoc(nestedDoc);
|
||||
context.addDoc(nestedDoc);
|
||||
}
|
||||
|
|
|
@ -20,12 +20,12 @@
|
|||
package org.elasticsearch.index.search.nested;
|
||||
|
||||
import org.apache.lucene.index.AtomicReaderContext;
|
||||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.DocIdSet;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.PrefixFilter;
|
||||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.index.mapper.internal.TypeFieldMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -34,7 +34,7 @@ public class NestedDocsFilter extends Filter {
|
|||
|
||||
public static final NestedDocsFilter INSTANCE = new NestedDocsFilter();
|
||||
|
||||
private final PrefixFilter filter = new PrefixFilter(new Term(TypeFieldMapper.NAME, "__"));
|
||||
private final PrefixFilter filter = new PrefixFilter(new Term(TypeFieldMapper.NAME, new BytesRef("__")));
|
||||
|
||||
private final int hashCode = filter.hashCode();
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.apache.lucene.search.DocIdSet;
|
|||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.PrefixFilter;
|
||||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.FixedBitSet;
|
||||
import org.elasticsearch.common.lucene.docset.DocIdSets;
|
||||
import org.elasticsearch.index.mapper.internal.TypeFieldMapper;
|
||||
|
@ -35,7 +36,7 @@ public class NonNestedDocsFilter extends Filter {
|
|||
|
||||
public static final NonNestedDocsFilter INSTANCE = new NonNestedDocsFilter();
|
||||
|
||||
private final PrefixFilter filter = new PrefixFilter(new Term(TypeFieldMapper.NAME, "__"));
|
||||
private final PrefixFilter filter = new PrefixFilter(new Term(TypeFieldMapper.NAME, new BytesRef("__")));
|
||||
|
||||
private final int hashCode = filter.hashCode();
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ public class NestedMappingTests {
|
|||
.bytes());
|
||||
|
||||
assertThat(doc.docs().size(), equalTo(2));
|
||||
assertThat(doc.docs().get(0).get(TypeFieldMapper.NAME), equalTo(nested1Mapper.nestedTypePath()));
|
||||
assertThat(doc.docs().get(0).get(TypeFieldMapper.NAME), equalTo(nested1Mapper.nestedTypePathAsString()));
|
||||
assertThat(doc.docs().get(0).get("nested1.field1"), equalTo("1"));
|
||||
assertThat(doc.docs().get(0).get("nested1.field2"), equalTo("2"));
|
||||
|
||||
|
@ -99,10 +99,10 @@ public class NestedMappingTests {
|
|||
.bytes());
|
||||
|
||||
assertThat(doc.docs().size(), equalTo(3));
|
||||
assertThat(doc.docs().get(0).get(TypeFieldMapper.NAME), equalTo(nested1Mapper.nestedTypePath()));
|
||||
assertThat(doc.docs().get(0).get(TypeFieldMapper.NAME), equalTo(nested1Mapper.nestedTypePathAsString()));
|
||||
assertThat(doc.docs().get(0).get("nested1.field1"), equalTo("3"));
|
||||
assertThat(doc.docs().get(0).get("nested1.field2"), equalTo("4"));
|
||||
assertThat(doc.docs().get(1).get(TypeFieldMapper.NAME), equalTo(nested1Mapper.nestedTypePath()));
|
||||
assertThat(doc.docs().get(1).get(TypeFieldMapper.NAME), equalTo(nested1Mapper.nestedTypePathAsString()));
|
||||
assertThat(doc.docs().get(1).get("nested1.field1"), equalTo("1"));
|
||||
assertThat(doc.docs().get(1).get("nested1.field2"), equalTo("2"));
|
||||
|
||||
|
|
Loading…
Reference in New Issue