Преглед на файлове

nested path to be represented as bytes as well as string

Shay Banon преди 13 години
родител
ревизия
14678a91ab

+ 0 - 2
src/main/java/org/elasticsearch/index/mapper/FieldMapper.java

@@ -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();

+ 13 - 6
src/main/java/org/elasticsearch/index/mapper/object/ObjectMapper.java

@@ -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);
         }

+ 2 - 2
src/main/java/org/elasticsearch/index/search/nested/NestedDocsFilter.java

@@ -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();
 

+ 2 - 1
src/main/java/org/elasticsearch/index/search/nested/NonNestedDocsFilter.java

@@ -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();
 

+ 3 - 3
src/test/java/org/elasticsearch/test/unit/index/mapper/nested/NestedMappingTests.java

@@ -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"));