Skip to content

Commit 3c0b347

Browse files
committed
prefix inside a dis_max / bool query broken, closes elastic#732.
1 parent a52ad32 commit 3c0b347

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/query/xcontent/PrefixQueryParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public class PrefixQueryParser extends AbstractIndexComponent implements XConten
7777
}
7878
}
7979
}
80+
parser.nextToken();
8081
} else {
8182
value = parser.text();
8283
parser.nextToken();

modules/elasticsearch/src/test/java/org/elasticsearch/index/query/xcontent/SimpleIndexQueryParserTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,22 @@ private XContentIndexQueryParser queryParser() throws IOException {
252252
assertThat(((TermQuery) secondsQ).getTerm(), equalTo(new Term("name.last", "last")));
253253
}
254254

255+
@Test public void testDisMax2() throws Exception {
256+
IndexQueryParser queryParser = queryParser();
257+
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/disMax2.json");
258+
Query parsedQuery = queryParser.parse(query).query();
259+
assertThat(parsedQuery, instanceOf(DisjunctionMaxQuery.class));
260+
DisjunctionMaxQuery disjunctionMaxQuery = (DisjunctionMaxQuery) parsedQuery;
261+
262+
List<Query> disjuncts = Queries.disMaxClauses(disjunctionMaxQuery);
263+
assertThat(disjuncts.size(), equalTo(1));
264+
265+
PrefixQuery firstQ = (PrefixQuery) disjuncts.get(0);
266+
// since age is automatically registered in data, we encode it as numeric
267+
assertThat(firstQ.getPrefix(), equalTo(new Term("name.first", "sh")));
268+
assertThat((double) firstQ.getBoost(), closeTo(1.2, 0.00001));
269+
}
270+
255271
@Test public void testTermQueryBuilder() throws IOException {
256272
IndexQueryParser queryParser = queryParser();
257273
Query parsedQuery = queryParser.parse(termQuery("age", 34).buildAsBytes()).query();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"dis_max" : {
3+
"queries" : [
4+
{
5+
"prefix" : {
6+
"name.first" : {
7+
"value" : "sh",
8+
"boost" : 1.2
9+
}
10+
}
11+
}
12+
]
13+
}
14+
}

0 commit comments

Comments
 (0)