Added support for Collections in TermsQuery/InQuery.

This commit is contained in:
Derek McNeil 2013-05-03 03:35:48 -05:00 committed by Simon Willnauer
parent 3c995d5dcc
commit fbd732cde2
3 changed files with 71 additions and 0 deletions

View File

@ -22,6 +22,8 @@ package org.elasticsearch.index.query;
import com.spatial4j.core.shape.Shape;
import org.elasticsearch.common.Nullable;
import java.util.Collection;
/**
* A static factory for simple "import static" usage.
*/
@ -675,6 +677,16 @@ public abstract class QueryBuilders {
return new TermsQueryBuilder(name, values);
}
/**
* A filer for a field based on several terms matching on any of them.
*
* @param name The field name
* @param values The terms
*/
public static TermsQueryBuilder termsQuery(String name, Collection values) {
return new TermsQueryBuilder(name, values);
}
/**
* A filer for a field based on several terms matching on any of them.
*
@ -735,6 +747,16 @@ public abstract class QueryBuilders {
return new TermsQueryBuilder(name, values);
}
/**
* A filer for a field based on several terms matching on any of them.
*
* @param name The field name
* @param values The terms
*/
public static TermsQueryBuilder inQuery(String name, Collection values) {
return new TermsQueryBuilder(name, values);
}
/**
* A query that will execute the wrapped query only for the specified indices, and "match_all" when
* it does not match those indices.

View File

@ -22,6 +22,7 @@ package org.elasticsearch.index.query;
import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Collection;
/**
*
@ -115,6 +116,16 @@ public class TermsQueryBuilder extends BaseQueryBuilder implements BoostableQuer
this.values = values;
}
/**
* A query for a field based on several terms matching on any of them.
*
* @param name The field name
* @param values The terms
*/
public TermsQueryBuilder(String name, Collection values) {
this(name, values.toArray());
}
/**
* Sets the minimum number of matches across the provided terms. Defaults to <tt>1</tt>.
*/

View File

@ -19,6 +19,7 @@
package org.elasticsearch.test.unit.index.query;
import com.google.common.collect.Lists;
import org.apache.lucene.index.Term;
import org.apache.lucene.queries.BoostingQuery;
import org.apache.lucene.queries.FilterClause;
@ -1193,6 +1194,23 @@ public class SimpleIndexQueryParserTests {
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
}
@Test
public void testTermsQueryBuilder() throws IOException {
IndexQueryParserService queryParser = queryParser();
Query parsedQuery = queryParser.parse(termsQuery("name.first", Lists.newArrayList("shay", "test"))).query();
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
BooleanQuery booleanQuery = (BooleanQuery) parsedQuery;
BooleanClause[] clauses = booleanQuery.getClauses();
assertThat(clauses.length, equalTo(2));
assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("name.first", "test")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
}
@Test
public void testTermsQuery() throws IOException {
IndexQueryParserService queryParser = queryParser();
@ -1211,6 +1229,26 @@ public class SimpleIndexQueryParserTests {
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
}
@Test
public void testInQuery() throws IOException {
IndexQueryParserService queryParser = queryParser();
Query parsedQuery = queryParser.parse(termsQuery("name.first", Lists.newArrayList("test1", "test2", "test3"))).query();
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
BooleanQuery booleanQuery = (BooleanQuery) parsedQuery;
BooleanClause[] clauses = booleanQuery.getClauses();
assertThat(clauses.length, equalTo(3));
assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("name.first", "test1")));
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("name.first", "test2")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("name.first", "test3")));
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
}
@Test
public void testFilteredQueryBuilder() throws IOException {
IndexQueryParserService queryParser = queryParser();