Query DSL: Field Query, closes #47.
This commit is contained in:
parent
12e87ba865
commit
4dbc167966
|
@ -0,0 +1,177 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elastic Search and Shay Banon under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. Elastic Search licenses this
|
||||||
|
* file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.index.query.json;
|
||||||
|
|
||||||
|
import org.elasticsearch.util.json.JsonBuilder;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kimchy (shay.banon)
|
||||||
|
*/
|
||||||
|
public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||||
|
|
||||||
|
public static enum Operator {
|
||||||
|
OR,
|
||||||
|
AND
|
||||||
|
}
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
private final Object query;
|
||||||
|
|
||||||
|
private Operator defaultOperator;
|
||||||
|
|
||||||
|
private String analyzer;
|
||||||
|
|
||||||
|
private Boolean allowLeadingWildcard;
|
||||||
|
|
||||||
|
private Boolean lowercaseExpandedTerms;
|
||||||
|
|
||||||
|
private Boolean enablePositionIncrements;
|
||||||
|
|
||||||
|
private float fuzzyMinSim = -1;
|
||||||
|
|
||||||
|
private float boost = -1;
|
||||||
|
|
||||||
|
private int fuzzyPrefixLength = -1;
|
||||||
|
|
||||||
|
private int phraseSlop = -1;
|
||||||
|
|
||||||
|
private boolean extraSet = false;
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder(String name, String query) {
|
||||||
|
this(name, (Object) query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder(String name, int query) {
|
||||||
|
this(name, (Object) query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder(String name, long query) {
|
||||||
|
this(name, (Object) query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder(String name, float query) {
|
||||||
|
this(name, (Object) query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder(String name, double query) {
|
||||||
|
this(name, (Object) query);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FieldJsonQueryBuilder(String name, Object query) {
|
||||||
|
this.name = name;
|
||||||
|
this.query = query;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder boost(float boost) {
|
||||||
|
this.boost = boost;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder defaultOperator(Operator defaultOperator) {
|
||||||
|
this.defaultOperator = defaultOperator;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder analyzer(String analyzer) {
|
||||||
|
this.analyzer = analyzer;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder allowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||||
|
this.allowLeadingWildcard = allowLeadingWildcard;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder lowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||||
|
this.lowercaseExpandedTerms = lowercaseExpandedTerms;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder enablePositionIncrements(boolean enablePositionIncrements) {
|
||||||
|
this.enablePositionIncrements = enablePositionIncrements;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder fuzzyMinSim(float fuzzyMinSim) {
|
||||||
|
this.fuzzyMinSim = fuzzyMinSim;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder fuzzyPrefixLength(int fuzzyPrefixLength) {
|
||||||
|
this.fuzzyPrefixLength = fuzzyPrefixLength;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldJsonQueryBuilder phraseSlop(int phraseSlop) {
|
||||||
|
this.phraseSlop = phraseSlop;
|
||||||
|
extraSet = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||||
|
builder.startObject(FieldJsonQueryParser.NAME);
|
||||||
|
if (!extraSet) {
|
||||||
|
builder.field(name, query);
|
||||||
|
} else {
|
||||||
|
builder.startObject(name);
|
||||||
|
builder.field("query", query);
|
||||||
|
if (defaultOperator != null) {
|
||||||
|
builder.field("defaultOperator", defaultOperator.name().toLowerCase());
|
||||||
|
}
|
||||||
|
if (analyzer != null) {
|
||||||
|
builder.field("analyzer", analyzer);
|
||||||
|
}
|
||||||
|
if (allowLeadingWildcard != null) {
|
||||||
|
builder.field("allowLeadingWildcard", allowLeadingWildcard);
|
||||||
|
}
|
||||||
|
if (lowercaseExpandedTerms != null) {
|
||||||
|
builder.field("lowercaseExpandedTerms", lowercaseExpandedTerms);
|
||||||
|
}
|
||||||
|
if (enablePositionIncrements != null) {
|
||||||
|
builder.field("enablePositionIncrements", enablePositionIncrements);
|
||||||
|
}
|
||||||
|
if (fuzzyMinSim != -1) {
|
||||||
|
builder.field("fuzzyMinSim", fuzzyMinSim);
|
||||||
|
}
|
||||||
|
if (boost != -1) {
|
||||||
|
builder.field("boost", boost);
|
||||||
|
}
|
||||||
|
if (fuzzyPrefixLength != -1) {
|
||||||
|
builder.field("fuzzyPrefixLength", fuzzyPrefixLength);
|
||||||
|
}
|
||||||
|
if (phraseSlop != -1) {
|
||||||
|
builder.field("phraseSlop", phraseSlop);
|
||||||
|
}
|
||||||
|
builder.endObject();
|
||||||
|
}
|
||||||
|
builder.endObject();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elastic Search and Shay Banon under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. Elastic Search licenses this
|
||||||
|
* file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.index.query.json;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
|
import org.apache.lucene.queryParser.ParseException;
|
||||||
|
import org.apache.lucene.queryParser.QueryParser;
|
||||||
|
import org.apache.lucene.search.FuzzyQuery;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
import org.codehaus.jackson.JsonParser;
|
||||||
|
import org.codehaus.jackson.JsonToken;
|
||||||
|
import org.elasticsearch.index.AbstractIndexComponent;
|
||||||
|
import org.elasticsearch.index.Index;
|
||||||
|
import org.elasticsearch.index.analysis.AnalysisService;
|
||||||
|
import org.elasticsearch.index.query.QueryParsingException;
|
||||||
|
import org.elasticsearch.index.query.support.MapperQueryParser;
|
||||||
|
import org.elasticsearch.index.settings.IndexSettings;
|
||||||
|
import org.elasticsearch.util.settings.Settings;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kimchy (shay.banon)
|
||||||
|
*/
|
||||||
|
public class FieldJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||||
|
|
||||||
|
public static final String NAME = "field";
|
||||||
|
|
||||||
|
private final AnalysisService analysisService;
|
||||||
|
|
||||||
|
@Inject public FieldJsonQueryParser(Index index, @IndexSettings Settings settings, AnalysisService analysisService) {
|
||||||
|
super(index, settings);
|
||||||
|
this.analysisService = analysisService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public String name() {
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||||
|
JsonParser jp = parseContext.jp();
|
||||||
|
|
||||||
|
JsonToken token = jp.nextToken();
|
||||||
|
assert token == JsonToken.FIELD_NAME;
|
||||||
|
String fieldName = jp.getCurrentName();
|
||||||
|
|
||||||
|
String queryString = null;
|
||||||
|
float boost = 1.0f;
|
||||||
|
MapperQueryParser.Operator defaultOperator = QueryParser.Operator.OR;
|
||||||
|
boolean lowercaseExpandedTerms = true;
|
||||||
|
boolean enablePositionIncrements = true;
|
||||||
|
int phraseSlop = 0;
|
||||||
|
float fuzzyMinSim = FuzzyQuery.defaultMinSimilarity;
|
||||||
|
int fuzzyPrefixLength = FuzzyQuery.defaultPrefixLength;
|
||||||
|
boolean escape = false;
|
||||||
|
Analyzer analyzer = null;
|
||||||
|
token = jp.nextToken();
|
||||||
|
if (token == JsonToken.START_OBJECT) {
|
||||||
|
String currentFieldName = null;
|
||||||
|
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||||
|
if (token == JsonToken.FIELD_NAME) {
|
||||||
|
currentFieldName = jp.getCurrentName();
|
||||||
|
} else {
|
||||||
|
if ("query".equals(currentFieldName)) {
|
||||||
|
queryString = jp.getText();
|
||||||
|
} else if ("boost".equals(currentFieldName)) {
|
||||||
|
boost = jp.getFloatValue();
|
||||||
|
} else if ("enablePositionIncrements".equals(currentFieldName)) {
|
||||||
|
if (token == JsonToken.VALUE_TRUE) {
|
||||||
|
enablePositionIncrements = true;
|
||||||
|
} else if (token == JsonToken.VALUE_FALSE) {
|
||||||
|
enablePositionIncrements = false;
|
||||||
|
} else {
|
||||||
|
enablePositionIncrements = jp.getIntValue() != 0;
|
||||||
|
}
|
||||||
|
} else if ("lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||||
|
if (token == JsonToken.VALUE_TRUE) {
|
||||||
|
lowercaseExpandedTerms = true;
|
||||||
|
} else if (token == JsonToken.VALUE_FALSE) {
|
||||||
|
lowercaseExpandedTerms = false;
|
||||||
|
} else {
|
||||||
|
lowercaseExpandedTerms = jp.getIntValue() != 0;
|
||||||
|
}
|
||||||
|
} else if ("phraseSlop".equals(currentFieldName)) {
|
||||||
|
phraseSlop = jp.getIntValue();
|
||||||
|
} else if ("analyzer".equals(currentFieldName)) {
|
||||||
|
analyzer = analysisService.analyzer(jp.getText());
|
||||||
|
} else if ("defaultOperator".equals(currentFieldName)) {
|
||||||
|
String op = jp.getText();
|
||||||
|
if ("or".equalsIgnoreCase(op)) {
|
||||||
|
defaultOperator = QueryParser.Operator.OR;
|
||||||
|
} else if ("and".equalsIgnoreCase(op)) {
|
||||||
|
defaultOperator = QueryParser.Operator.AND;
|
||||||
|
} else {
|
||||||
|
throw new QueryParsingException(index, "Query default operator [" + op + "] is not allowed");
|
||||||
|
}
|
||||||
|
} else if ("fuzzyMinSim".equals(currentFieldName)) {
|
||||||
|
fuzzyMinSim = jp.getFloatValue();
|
||||||
|
} else if ("fuzzyPrefixLength".equals(currentFieldName)) {
|
||||||
|
fuzzyPrefixLength = jp.getIntValue();
|
||||||
|
} else if ("escape".equals(currentFieldName)) {
|
||||||
|
if (token == JsonToken.VALUE_TRUE) {
|
||||||
|
escape = true;
|
||||||
|
} else if (token == JsonToken.VALUE_FALSE) {
|
||||||
|
escape = false;
|
||||||
|
} else {
|
||||||
|
escape = jp.getIntValue() != 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jp.nextToken();
|
||||||
|
} else {
|
||||||
|
queryString = jp.getText();
|
||||||
|
// move to the next token
|
||||||
|
jp.nextToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (analyzer == null) {
|
||||||
|
analyzer = parseContext.mapperService().searchAnalyzer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queryString == null) {
|
||||||
|
throw new QueryParsingException(index, "No value specified for term query");
|
||||||
|
}
|
||||||
|
|
||||||
|
MapperQueryParser queryParser = new MapperQueryParser(fieldName, analyzer, parseContext.mapperService(), parseContext.filterCache());
|
||||||
|
queryParser.setEnablePositionIncrements(enablePositionIncrements);
|
||||||
|
queryParser.setLowercaseExpandedTerms(lowercaseExpandedTerms);
|
||||||
|
queryParser.setPhraseSlop(phraseSlop);
|
||||||
|
queryParser.setDefaultOperator(defaultOperator);
|
||||||
|
queryParser.setFuzzyMinSim(fuzzyMinSim);
|
||||||
|
queryParser.setFuzzyPrefixLength(fuzzyPrefixLength);
|
||||||
|
|
||||||
|
if (escape) {
|
||||||
|
queryString = QueryParser.escape(queryString);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Query query = queryParser.parse(queryString);
|
||||||
|
query.setBoost(boost);
|
||||||
|
return fixNegativeQueryIfNeeded(query);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new QueryParsingException(index, "Failed to parse query [" + queryString + "]", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -52,8 +52,28 @@ public abstract class JsonQueryBuilders {
|
||||||
return new TermJsonQueryBuilder(name, value);
|
return new TermJsonQueryBuilder(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PrefixJsonQueryBuilder prefixQuery(String name, String value) {
|
public static FieldJsonQueryBuilder fieldQuery(String name, String query) {
|
||||||
return new PrefixJsonQueryBuilder(name, value);
|
return new FieldJsonQueryBuilder(name, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FieldJsonQueryBuilder fieldQuery(String name, int query) {
|
||||||
|
return new FieldJsonQueryBuilder(name, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FieldJsonQueryBuilder fieldQuery(String name, long query) {
|
||||||
|
return new FieldJsonQueryBuilder(name, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FieldJsonQueryBuilder fieldQuery(String name, float query) {
|
||||||
|
return new FieldJsonQueryBuilder(name, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FieldJsonQueryBuilder fieldQuery(String name, double query) {
|
||||||
|
return new FieldJsonQueryBuilder(name, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PrefixJsonQueryBuilder prefixQuery(String name, String query) {
|
||||||
|
return new PrefixJsonQueryBuilder(name, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RangeJsonQueryBuilder rangeQuery(String name) {
|
public static RangeJsonQueryBuilder rangeQuery(String name) {
|
||||||
|
|
|
@ -52,6 +52,7 @@ public class JsonQueryParserRegistry {
|
||||||
add(queryParsersMap, new QueryStringJsonQueryParser(index, indexSettings, analysisService));
|
add(queryParsersMap, new QueryStringJsonQueryParser(index, indexSettings, analysisService));
|
||||||
add(queryParsersMap, new BoolJsonQueryParser(index, indexSettings));
|
add(queryParsersMap, new BoolJsonQueryParser(index, indexSettings));
|
||||||
add(queryParsersMap, new TermJsonQueryParser(index, indexSettings));
|
add(queryParsersMap, new TermJsonQueryParser(index, indexSettings));
|
||||||
|
add(queryParsersMap, new FieldJsonQueryParser(index, indexSettings, analysisService));
|
||||||
add(queryParsersMap, new RangeJsonQueryParser(index, indexSettings));
|
add(queryParsersMap, new RangeJsonQueryParser(index, indexSettings));
|
||||||
add(queryParsersMap, new PrefixJsonQueryParser(index, indexSettings));
|
add(queryParsersMap, new PrefixJsonQueryParser(index, indexSettings));
|
||||||
add(queryParsersMap, new WildcardJsonQueryParser(index, indexSettings));
|
add(queryParsersMap, new WildcardJsonQueryParser(index, indexSettings));
|
||||||
|
|
|
@ -64,7 +64,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryStringJsonQueryBuilder defualtOperator(Operator defaultOperator) {
|
public QueryStringJsonQueryBuilder defaultOperator(Operator defaultOperator) {
|
||||||
this.defaultOperator = defaultOperator;
|
this.defaultOperator = defaultOperator;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.elasticsearch.util.json.JsonBuilder;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kimchy (Shay Banon)
|
* @author kimchy (shay.banon)
|
||||||
*/
|
*/
|
||||||
public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ import java.io.IOException;
|
||||||
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kimchy (Shay Banon)
|
* @author kimchy (shay.banon)
|
||||||
*/
|
*/
|
||||||
public class TermJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
public class TermJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.elasticsearch.util.json.JsonBuilder;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kimchy (Shay Banon)
|
* @author kimchy (shay.banon)
|
||||||
*/
|
*/
|
||||||
public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import org.elasticsearch.util.lucene.search.TermFilter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kimchy (Shay Banon)
|
* @author kimchy (shay.banon)
|
||||||
*/
|
*/
|
||||||
public final class QueryParsers {
|
public final class QueryParsers {
|
||||||
|
|
||||||
|
|
|
@ -170,9 +170,9 @@ public class RestSearchAction extends BaseRestHandler {
|
||||||
String defaultOperator = request.param("defaultOperator");
|
String defaultOperator = request.param("defaultOperator");
|
||||||
if (defaultOperator != null) {
|
if (defaultOperator != null) {
|
||||||
if ("OR".equals(defaultOperator)) {
|
if ("OR".equals(defaultOperator)) {
|
||||||
queryBuilder.defualtOperator(QueryStringJsonQueryBuilder.Operator.OR);
|
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.OR);
|
||||||
} else if ("AND".equals(defaultOperator)) {
|
} else if ("AND".equals(defaultOperator)) {
|
||||||
queryBuilder.defualtOperator(QueryStringJsonQueryBuilder.Operator.AND);
|
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.AND);
|
||||||
} else {
|
} else {
|
||||||
throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]");
|
throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]");
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,9 +95,9 @@ public class RestActions {
|
||||||
String defaultOperator = request.param("defaultOperator");
|
String defaultOperator = request.param("defaultOperator");
|
||||||
if (defaultOperator != null) {
|
if (defaultOperator != null) {
|
||||||
if ("OR".equals(defaultOperator)) {
|
if ("OR".equals(defaultOperator)) {
|
||||||
queryBuilder.defualtOperator(QueryStringJsonQueryBuilder.Operator.OR);
|
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.OR);
|
||||||
} else if ("AND".equals(defaultOperator)) {
|
} else if ("AND".equals(defaultOperator)) {
|
||||||
queryBuilder.defualtOperator(QueryStringJsonQueryBuilder.Operator.AND);
|
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.AND);
|
||||||
} else {
|
} else {
|
||||||
throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]");
|
throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]");
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,6 +150,49 @@ public class SimpleJsonIndexQueryParserTests {
|
||||||
assertThat(termQuery.getTerm(), equalTo(new Term("age", NumericUtils.longToPrefixCoded(34))));
|
assertThat(termQuery.getTerm(), equalTo(new Term("age", NumericUtils.longToPrefixCoded(34))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test public void testFieldQueryBuilder1() throws IOException {
|
||||||
|
IndexQueryParser queryParser = newQueryParser();
|
||||||
|
Query parsedQuery = queryParser.parse(fieldQuery("age", 34).buildAsBytes());
|
||||||
|
assertThat(parsedQuery, instanceOf(TermQuery.class));
|
||||||
|
TermQuery termQuery = (TermQuery) parsedQuery;
|
||||||
|
// since age is automatically registered in data, we encode it as numeric
|
||||||
|
assertThat(termQuery.getTerm(), equalTo(new Term("age", NumericUtils.longToPrefixCoded(34))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test public void testFieldQuery1() throws IOException {
|
||||||
|
IndexQueryParser queryParser = newQueryParser();
|
||||||
|
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/field1.json");
|
||||||
|
Query parsedQuery = queryParser.parse(query);
|
||||||
|
assertThat(parsedQuery, instanceOf(TermQuery.class));
|
||||||
|
TermQuery termQuery = (TermQuery) parsedQuery;
|
||||||
|
// since age is automatically registered in data, we encode it as numeric
|
||||||
|
assertThat(termQuery.getTerm(), equalTo(new Term("age", NumericUtils.longToPrefixCoded(34))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test public void testFieldQuery2() throws IOException {
|
||||||
|
IndexQueryParser queryParser = newQueryParser();
|
||||||
|
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/field2.json");
|
||||||
|
Query parsedQuery = queryParser.parse(query);
|
||||||
|
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
|
||||||
|
BooleanQuery bQuery = (BooleanQuery) parsedQuery;
|
||||||
|
assertThat(bQuery.getClauses().length, equalTo(2));
|
||||||
|
assertThat(((TermQuery) bQuery.getClauses()[0].getQuery()).getTerm().field(), equalTo("name.first"));
|
||||||
|
assertThat(((TermQuery) bQuery.getClauses()[0].getQuery()).getTerm().text(), equalTo("12-54-23"));
|
||||||
|
assertThat(((TermQuery) bQuery.getClauses()[1].getQuery()).getTerm().field(), equalTo("name.first"));
|
||||||
|
assertThat(((TermQuery) bQuery.getClauses()[1].getQuery()).getTerm().text(), equalTo("else"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test public void testFieldQuery3() throws IOException {
|
||||||
|
IndexQueryParser queryParser = newQueryParser();
|
||||||
|
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/field3.json");
|
||||||
|
Query parsedQuery = queryParser.parse(query);
|
||||||
|
assertThat((double) parsedQuery.getBoost(), closeTo(2.0, 0.01));
|
||||||
|
assertThat(parsedQuery, instanceOf(TermQuery.class));
|
||||||
|
TermQuery termQuery = (TermQuery) parsedQuery;
|
||||||
|
// since age is automatically registered in data, we encode it as numeric
|
||||||
|
assertThat(termQuery.getTerm(), equalTo(new Term("age", NumericUtils.longToPrefixCoded(34))));
|
||||||
|
}
|
||||||
|
|
||||||
@Test public void testTermWithBoostQueryBuilder() throws IOException {
|
@Test public void testTermWithBoostQueryBuilder() throws IOException {
|
||||||
IndexQueryParser queryParser = newQueryParser();
|
IndexQueryParser queryParser = newQueryParser();
|
||||||
Query parsedQuery = queryParser.parse(termQuery("age", 34).boost(2.0f));
|
Query parsedQuery = queryParser.parse(termQuery("age", 34).boost(2.0f));
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
field : { age : 34 }
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
field : { "name.first" : "12-54-23 else" }
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
field : { age : { query : 34, boost : 2.0, enablePositionIncrements : false } }
|
||||||
|
}
|
Loading…
Reference in New Issue