Skip to content

Commit 23d2799

Browse files
committed
uppercase first letter in property name breaks "_all" queries, closes #178.
1 parent d388194 commit 23d2799

File tree

6 files changed

+49
-53
lines changed

6 files changed

+49
-53
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/XContentAllFieldMapper.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.mapper.xcontent;
2121

2222
import org.apache.lucene.analysis.Analyzer;
23-
import org.apache.lucene.analysis.TokenStream;
2423
import org.apache.lucene.document.Field;
2524
import org.apache.lucene.document.Fieldable;
2625
import org.apache.lucene.index.Term;
@@ -30,13 +29,12 @@
3029
import org.elasticsearch.index.mapper.DocumentMapper;
3130
import org.elasticsearch.index.mapper.MergeMappingException;
3231
import org.elasticsearch.util.lucene.Lucene;
32+
import org.elasticsearch.util.lucene.all.AllField;
3333
import org.elasticsearch.util.lucene.all.AllTermQuery;
3434
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
3535

3636
import java.io.IOException;
3737

38-
import static org.elasticsearch.util.lucene.all.AllTokenFilter.*;
39-
4038
/**
4139
* @author kimchy (shay.banon)
4240
*/
@@ -114,23 +112,15 @@ public boolean enabled() {
114112
return new AllTermQuery(new Term(names.indexName(), value));
115113
}
116114

117-
@Override protected Field parseCreateField(ParseContext context) throws IOException {
115+
@Override protected Fieldable parseCreateField(ParseContext context) throws IOException {
118116
if (!enabled) {
119117
return null;
120118
}
121119
// reset the entries
122120
context.allEntries().reset();
123121

124122
Analyzer analyzer = findAnalyzer(context.docMapper());
125-
TokenStream tokenStream = allTokenStream(names.indexName(), context.allEntries(), analyzer);
126-
if (stored()) {
127-
// TODO when its possible to pass char[] to field, we can optimize
128-
Field field = new Field(names.indexName(), context.allEntries().buildText(), store, index, termVector);
129-
field.setTokenStream(tokenStream);
130-
return field;
131-
} else {
132-
return new Field(names.indexName(), tokenStream, termVector);
133-
}
123+
return new AllField(names.indexName(), store, termVector, context.allEntries(), analyzer);
134124
}
135125

136126
private Analyzer findAnalyzer(DocumentMapper docMapper) {

modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/XContentFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ protected XContentFieldMapper(Names names, Field.Index index, Field.Store store,
267267
}
268268

269269
@Override public void parse(ParseContext context) throws IOException {
270-
Field field = parseCreateField(context);
270+
Fieldable field = parseCreateField(context);
271271
if (field == null) {
272272
return;
273273
}
@@ -279,7 +279,7 @@ protected XContentFieldMapper(Names names, Field.Index index, Field.Store store,
279279
}
280280
}
281281

282-
protected abstract Field parseCreateField(ParseContext context) throws IOException;
282+
protected abstract Fieldable parseCreateField(ParseContext context) throws IOException;
283283

284284
@Override public void traverse(FieldMapperListener fieldMapperListener) {
285285
fieldMapperListener.fieldMapper(this);

modules/elasticsearch/src/main/java/org/elasticsearch/util/lucene/all/AllAnalyzer.java renamed to modules/elasticsearch/src/main/java/org/elasticsearch/util/lucene/all/AllField.java

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,39 +21,45 @@
2121

2222
import org.apache.lucene.analysis.Analyzer;
2323
import org.apache.lucene.analysis.TokenStream;
24-
import org.apache.lucene.document.Fieldable;
24+
import org.apache.lucene.document.AbstractField;
25+
import org.apache.lucene.document.Field;
26+
import org.elasticsearch.ElasticSearchException;
2527

2628
import java.io.IOException;
2729
import java.io.Reader;
2830

2931
/**
30-
* An all analyzer.
31-
*
3232
* @author kimchy (shay.banon)
3333
*/
34-
public class AllAnalyzer extends Analyzer {
34+
public class AllField extends AbstractField {
35+
36+
private final AllEntries allEntries;
3537

3638
private final Analyzer analyzer;
3739

38-
public AllAnalyzer(Analyzer analyzer) {
39-
this.analyzer = analyzer;
40-
}
40+
public AllField(String name, Field.Store store, Field.TermVector termVector, AllEntries allEntries, Analyzer analyzer) {
41+
super(name, store, Field.Index.ANALYZED, termVector);
4142

42-
@Override public TokenStream tokenStream(String fieldName, Reader reader) {
43-
AllEntries allEntries = (AllEntries) reader;
44-
return new AllTokenFilter(analyzer.tokenStream(fieldName, reader), allEntries);
43+
this.allEntries = allEntries;
44+
this.analyzer = analyzer;
4545
}
4646

47-
@Override public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
48-
AllEntries allEntries = (AllEntries) reader;
49-
return new AllTokenFilter(analyzer.reusableTokenStream(fieldName, reader), allEntries);
47+
@Override public String stringValue() {
48+
if (isStored()) {
49+
return allEntries.buildText();
50+
}
51+
return null;
5052
}
5153

52-
@Override public int getPositionIncrementGap(String fieldName) {
53-
return analyzer.getPositionIncrementGap(fieldName);
54+
@Override public Reader readerValue() {
55+
return null;
5456
}
5557

56-
@Override public int getOffsetGap(Fieldable field) {
57-
return analyzer.getOffsetGap(field);
58+
@Override public TokenStream tokenStreamValue() {
59+
try {
60+
return AllTokenStream.allTokenStream(name, allEntries, analyzer);
61+
} catch (IOException e) {
62+
throw new ElasticSearchException("Failed to create token stream");
63+
}
5864
}
5965
}

modules/elasticsearch/src/main/java/org/elasticsearch/util/lucene/all/AllTokenFilter.java renamed to modules/elasticsearch/src/main/java/org/elasticsearch/util/lucene/all/AllTokenStream.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,17 @@
3232
/**
3333
* @author kimchy (shay.banon)
3434
*/
35-
public class AllTokenFilter extends TokenFilter {
35+
public class AllTokenStream extends TokenFilter {
3636

3737
public static TokenStream allTokenStream(String allFieldName, AllEntries allEntries, Analyzer analyzer) throws IOException {
38-
return new AllTokenFilter(analyzer.reusableTokenStream(allFieldName, allEntries), allEntries);
38+
return new AllTokenStream(analyzer.reusableTokenStream(allFieldName, allEntries), allEntries);
3939
}
4040

4141
private final AllEntries allEntries;
4242

4343
private final PayloadAttribute payloadAttribute;
4444

45-
AllTokenFilter(TokenStream input, AllEntries allEntries) {
45+
AllTokenStream(TokenStream input, AllEntries allEntries) {
4646
super(input);
4747
this.allEntries = allEntries;
4848
payloadAttribute = addAttribute(PayloadAttribute.class);

modules/elasticsearch/src/test/java/org/elasticsearch/index/mapper/xcontent/all/SimpleAllMapperTests.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
package org.elasticsearch.index.mapper.xcontent.all;
2121

2222
import org.apache.lucene.document.Document;
23-
import org.apache.lucene.document.Field;
2423
import org.elasticsearch.index.Index;
2524
import org.elasticsearch.index.analysis.AnalysisService;
2625
import org.elasticsearch.index.mapper.xcontent.XContentDocumentMapper;
2726
import org.elasticsearch.index.mapper.xcontent.XContentDocumentMapperParser;
2827
import org.elasticsearch.util.lucene.all.AllEntries;
29-
import org.elasticsearch.util.lucene.all.AllTokenFilter;
28+
import org.elasticsearch.util.lucene.all.AllField;
29+
import org.elasticsearch.util.lucene.all.AllTokenStream;
3030
import org.testng.annotations.Test;
3131

3232
import static org.elasticsearch.util.io.Streams.*;
@@ -44,8 +44,8 @@ public class SimpleAllMapperTests {
4444
XContentDocumentMapper docMapper = (XContentDocumentMapper) new XContentDocumentMapperParser(new AnalysisService(new Index("test"))).parse(mapping);
4545
byte[] json = copyToBytesFromClasspath("/org/elasticsearch/index/mapper/xcontent/all/test1.json");
4646
Document doc = docMapper.parse(json).doc();
47-
Field field = doc.getField("_all");
48-
AllEntries allEntries = ((AllTokenFilter) field.tokenStreamValue()).allEntries();
47+
AllField field = (AllField) doc.getFieldable("_all");
48+
AllEntries allEntries = ((AllTokenStream) field.tokenStreamValue()).allEntries();
4949
assertThat(allEntries.fields().size(), equalTo(2));
5050
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
5151
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
@@ -61,8 +61,8 @@ public class SimpleAllMapperTests {
6161
byte[] json = copyToBytesFromClasspath("/org/elasticsearch/index/mapper/xcontent/all/test1.json");
6262
Document doc = builtDocMapper.parse(json).doc();
6363

64-
Field field = doc.getField("_all");
65-
AllEntries allEntries = ((AllTokenFilter) field.tokenStreamValue()).allEntries();
64+
AllField field = (AllField) doc.getFieldable("_all");
65+
AllEntries allEntries = ((AllTokenStream) field.tokenStreamValue()).allEntries();
6666
assertThat(allEntries.fields().size(), equalTo(2));
6767
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
6868
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
@@ -73,8 +73,8 @@ public class SimpleAllMapperTests {
7373
XContentDocumentMapper docMapper = (XContentDocumentMapper) new XContentDocumentMapperParser(new AnalysisService(new Index("test"))).parse(mapping);
7474
byte[] json = copyToBytesFromClasspath("/org/elasticsearch/index/mapper/xcontent/all/test1.json");
7575
Document doc = docMapper.parse(json).doc();
76-
Field field = doc.getField("_all");
77-
AllEntries allEntries = ((AllTokenFilter) field.tokenStreamValue()).allEntries();
76+
AllField field = (AllField) doc.getFieldable("_all");
77+
AllEntries allEntries = ((AllTokenStream) field.tokenStreamValue()).allEntries();
7878
assertThat(allEntries.fields().size(), equalTo(2));
7979
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
8080
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
@@ -93,8 +93,8 @@ public class SimpleAllMapperTests {
9393
byte[] json = copyToBytesFromClasspath("/org/elasticsearch/index/mapper/xcontent/all/test1.json");
9494
Document doc = builtDocMapper.parse(json).doc();
9595

96-
Field field = doc.getField("_all");
97-
AllEntries allEntries = ((AllTokenFilter) field.tokenStreamValue()).allEntries();
96+
AllField field = (AllField) doc.getFieldable("_all");
97+
AllEntries allEntries = ((AllTokenStream) field.tokenStreamValue()).allEntries();
9898
assertThat(allEntries.fields().size(), equalTo(2));
9999
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
100100
assertThat(allEntries.fields().contains("simple1"), equalTo(true));

modules/elasticsearch/src/test/java/org/elasticsearch/util/lucene/all/SimpleAllTests.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public class SimpleAllTests {
5050
allEntries.addText("field1", "something", 1.0f);
5151
allEntries.addText("field2", "else", 1.0f);
5252
allEntries.reset();
53-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
53+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
5454

5555
indexWriter.addDocument(doc);
5656

@@ -60,7 +60,7 @@ public class SimpleAllTests {
6060
allEntries.addText("field1", "else", 1.0f);
6161
allEntries.addText("field2", "something", 1.0f);
6262
allEntries.reset();
63-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
63+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
6464

6565
indexWriter.addDocument(doc);
6666

@@ -92,7 +92,7 @@ public class SimpleAllTests {
9292
allEntries.addText("field1", "something", 1.0f);
9393
allEntries.addText("field2", "else", 1.0f);
9494
allEntries.reset();
95-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
95+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
9696

9797
indexWriter.addDocument(doc);
9898

@@ -102,7 +102,7 @@ public class SimpleAllTests {
102102
allEntries.addText("field1", "else", 2.0f);
103103
allEntries.addText("field2", "something", 1.0f);
104104
allEntries.reset();
105-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
105+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
106106

107107
indexWriter.addDocument(doc);
108108

@@ -135,7 +135,7 @@ public class SimpleAllTests {
135135
allEntries.addText("field1", "something moo", 1.0f);
136136
allEntries.addText("field2", "else koo", 1.0f);
137137
allEntries.reset();
138-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
138+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
139139

140140
indexWriter.addDocument(doc);
141141

@@ -145,7 +145,7 @@ public class SimpleAllTests {
145145
allEntries.addText("field1", "else koo", 1.0f);
146146
allEntries.addText("field2", "something moo", 1.0f);
147147
allEntries.reset();
148-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
148+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
149149

150150
indexWriter.addDocument(doc);
151151

@@ -187,7 +187,7 @@ public class SimpleAllTests {
187187
allEntries.addText("field1", "something moo", 1.0f);
188188
allEntries.addText("field2", "else koo", 1.0f);
189189
allEntries.reset();
190-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
190+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
191191

192192
indexWriter.addDocument(doc);
193193

@@ -197,7 +197,7 @@ public class SimpleAllTests {
197197
allEntries.addText("field1", "else koo", 2.0f);
198198
allEntries.addText("field2", "something moo", 1.0f);
199199
allEntries.reset();
200-
doc.add(new Field("_all", AllTokenFilter.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
200+
doc.add(new Field("_all", AllTokenStream.allTokenStream("_all", allEntries, Lucene.STANDARD_ANALYZER)));
201201

202202
indexWriter.addDocument(doc);
203203

0 commit comments

Comments
 (0)