diff --git a/src/main/java/org/elasticsearch/index/query/TextQueryBuilder.java b/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java similarity index 83% rename from src/main/java/org/elasticsearch/index/query/TextQueryBuilder.java rename to src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java index 683a173b2c5..c581763dc50 100644 --- a/src/main/java/org/elasticsearch/index/query/TextQueryBuilder.java +++ b/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java @@ -25,10 +25,10 @@ import java.io.IOException; import java.util.Locale; /** - * Text query is a query that analyzes the text and constructs a query as the result of the analysis. It + * Match query is a query that analyzes the text and constructs a query as the result of the analysis. It * can construct different queries based on the type provided. */ -public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQueryBuilder { +public class MatchQueryBuilder extends BaseQueryBuilder implements BoostableQueryBuilder { public static enum Operator { OR, @@ -78,7 +78,7 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery /** * Constructs a new text query. */ - public TextQueryBuilder(String name, Object text) { + public MatchQueryBuilder(String name, Object text) { this.name = name; this.text = text; } @@ -86,7 +86,7 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery /** * Sets the type of the text query. */ - public TextQueryBuilder type(Type type) { + public MatchQueryBuilder type(Type type) { this.type = type; return this; } @@ -94,7 +94,7 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery /** * Sets the operator to use when using a boolean query. Defaults to OR. */ - public TextQueryBuilder operator(Operator operator) { + public MatchQueryBuilder operator(Operator operator) { this.operator = operator; return this; } @@ -103,7 +103,7 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery * Explicitly set the analyzer to use. Defaults to use explicit mapping config for the field, or, if not * set, the default search analyzer. */ - public TextQueryBuilder analyzer(String analyzer) { + public MatchQueryBuilder analyzer(String analyzer) { this.analyzer = analyzer; return this; } @@ -111,7 +111,7 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery /** * Set the boost to apply to the query. */ - public TextQueryBuilder boost(float boost) { + public MatchQueryBuilder boost(float boost) { this.boost = boost; return this; } @@ -119,7 +119,7 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery /** * Set the phrase slop if evaluated to a phrase query type. */ - public TextQueryBuilder slop(int slop) { + public MatchQueryBuilder slop(int slop) { this.slop = slop; return this; } @@ -127,12 +127,12 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery /** * Sets the minimum similarity used when evaluated to a fuzzy query type. Defaults to "0.5". */ - public TextQueryBuilder fuzziness(Object fuzziness) { + public MatchQueryBuilder fuzziness(Object fuzziness) { this.fuzziness = fuzziness.toString(); return this; } - public TextQueryBuilder prefixLength(int prefixLength) { + public MatchQueryBuilder prefixLength(int prefixLength) { this.prefixLength = prefixLength; return this; } @@ -141,29 +141,29 @@ public class TextQueryBuilder extends BaseQueryBuilder implements BoostableQuery * When using fuzzy or prefix type query, the number of term expansions to use. Defaults to unbounded * so its recommended to set it to a reasonable value for faster execution. */ - public TextQueryBuilder maxExpansions(int maxExpansions) { + public MatchQueryBuilder maxExpansions(int maxExpansions) { this.maxExpansions = maxExpansions; return this; } - public TextQueryBuilder minimumShouldMatch(String minimumShouldMatch) { + public MatchQueryBuilder minimumShouldMatch(String minimumShouldMatch) { this.minimumShouldMatch = minimumShouldMatch; return this; } - public TextQueryBuilder rewrite(String rewrite) { + public MatchQueryBuilder rewrite(String rewrite) { this.rewrite = rewrite; return this; } - public TextQueryBuilder fuzzyRewrite(String fuzzyRewrite) { + public MatchQueryBuilder fuzzyRewrite(String fuzzyRewrite) { this.fuzzyRewrite = fuzzyRewrite; return this; } @Override public void doXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(TextQueryParser.NAME); + builder.startObject(MatchQueryParser.NAME); builder.startObject(name); builder.field("query", text); diff --git a/src/main/java/org/elasticsearch/index/query/TextQueryParser.java b/src/main/java/org/elasticsearch/index/query/MatchQueryParser.java similarity index 80% rename from src/main/java/org/elasticsearch/index/query/TextQueryParser.java rename to src/main/java/org/elasticsearch/index/query/MatchQueryParser.java index 98feed5528b..909a69e0487 100644 --- a/src/main/java/org/elasticsearch/index/query/TextQueryParser.java +++ b/src/main/java/org/elasticsearch/index/query/MatchQueryParser.java @@ -24,39 +24,45 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.query.support.QueryParsers; +import org.elasticsearch.index.search.MatchQuery; import java.io.IOException; /** * */ -public class TextQueryParser implements QueryParser { +public class MatchQueryParser implements QueryParser { - public static final String NAME = "text"; + public static final String NAME = "match"; @Inject - public TextQueryParser() { + public MatchQueryParser() { } @Override public String[] names() { - return new String[]{NAME, "text_phrase", "textPhrase", "text_phrase_prefix", "textPhrasePrefix", "fuzzyText", "fuzzy_text"}; + return new String[]{ + NAME, "match_phrase", "matchPhrase", "match_phrase_prefix", "matchPhrasePrefix", "matchFuzzy", "match_fuzzy", "fuzzy_match", + "text", "text_phrase", "textPhrase", "text_phrase_prefix", "textPhrasePrefix", "fuzzyText", "fuzzy_text" + }; } @Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException { XContentParser parser = parseContext.parser(); - org.elasticsearch.index.search.TextQueryParser.Type type = org.elasticsearch.index.search.TextQueryParser.Type.BOOLEAN; - if ("text_phrase".equals(parser.currentName()) || "textPhrase".equals(parser.currentName())) { - type = org.elasticsearch.index.search.TextQueryParser.Type.PHRASE; - } else if ("text_phrase_prefix".equals(parser.currentName()) || "textPhrasePrefix".equals(parser.currentName())) { - type = org.elasticsearch.index.search.TextQueryParser.Type.PHRASE_PREFIX; + MatchQuery.Type type = MatchQuery.Type.BOOLEAN; + if ("match_phrase".equals(parser.currentName()) || "matchPhrase".equals(parser.currentName()) || + "text_phrase".equals(parser.currentName()) || "textPhrase".equals(parser.currentName())) { + type = MatchQuery.Type.PHRASE; + } else if ("match_phrase_prefix".equals(parser.currentName()) || "matchPhrasePrefix".equals(parser.currentName()) || + "text_phrase_prefix".equals(parser.currentName()) || "textPhrasePrefix".equals(parser.currentName())) { + type = MatchQuery.Type.PHRASE_PREFIX; } XContentParser.Token token = parser.nextToken(); if (token != XContentParser.Token.FIELD_NAME) { - throw new QueryParsingException(parseContext.index(), "[text] query malformed, no field"); + throw new QueryParsingException(parseContext.index(), "[match] query malformed, no field"); } String fieldName = parser.currentName(); @@ -84,16 +90,16 @@ public class TextQueryParser implements QueryParser { } else if ("type".equals(currentFieldName)) { String tStr = parser.text(); if ("boolean".equals(tStr)) { - type = org.elasticsearch.index.search.TextQueryParser.Type.BOOLEAN; + type = MatchQuery.Type.BOOLEAN; } else if ("phrase".equals(tStr)) { - type = org.elasticsearch.index.search.TextQueryParser.Type.PHRASE; + type = MatchQuery.Type.PHRASE; } else if ("phrase_prefix".equals(tStr) || "phrasePrefix".equals(currentFieldName)) { - type = org.elasticsearch.index.search.TextQueryParser.Type.PHRASE_PREFIX; + type = MatchQuery.Type.PHRASE_PREFIX; } } else if ("analyzer".equals(currentFieldName)) { analyzer = parser.text(); if (parseContext.analysisService().analyzer(analyzer) == null) { - throw new QueryParsingException(parseContext.index(), "[text] analyzer [" + parser.text() + "] not found"); + throw new QueryParsingException(parseContext.index(), "[match] analyzer [" + parser.text() + "] not found"); } } else if ("boost".equals(currentFieldName)) { boost = parser.floatValue(); @@ -121,7 +127,7 @@ public class TextQueryParser implements QueryParser { } else if ("fuzzy_rewrite".equals(currentFieldName) || "fuzzyRewrite".equals(currentFieldName)) { fuzzyRewriteMethod = QueryParsers.parseRewriteMethod(parser.textOrNull(), null); } else { - throw new QueryParsingException(parseContext.index(), "[text] query does not support [" + currentFieldName + "]"); + throw new QueryParsingException(parseContext.index(), "[match] query does not support [" + currentFieldName + "]"); } } } @@ -136,7 +142,7 @@ public class TextQueryParser implements QueryParser { throw new QueryParsingException(parseContext.index(), "No text specified for text query"); } - org.elasticsearch.index.search.TextQueryParser tQP = new org.elasticsearch.index.search.TextQueryParser(parseContext, fieldName, text); + MatchQuery tQP = new MatchQuery(parseContext, fieldName, text); tQP.setPhraseSlop(phraseSlop); tQP.setAnalyzer(analyzer); tQP.setFuzziness(fuzziness); diff --git a/src/main/java/org/elasticsearch/index/query/QueryBuilders.java b/src/main/java/org/elasticsearch/index/query/QueryBuilders.java index e32e947af18..fd70a99f944 100644 --- a/src/main/java/org/elasticsearch/index/query/QueryBuilders.java +++ b/src/main/java/org/elasticsearch/index/query/QueryBuilders.java @@ -40,7 +40,7 @@ public abstract class QueryBuilders { * @param text The query text (to be analyzed). * @deprecated use {@link #textQuery(String, Object)} instead */ - public static TextQueryBuilder text(String name, Object text) { + public static MatchQueryBuilder text(String name, Object text) { return textQuery(name, text); } @@ -49,9 +49,20 @@ public abstract class QueryBuilders { * * @param name The field name. * @param text The query text (to be analyzed). + * @deprecated Use {@link #matchQuery(String, Object)} */ - public static TextQueryBuilder textQuery(String name, Object text) { - return new TextQueryBuilder(name, text).type(TextQueryBuilder.Type.BOOLEAN); + public static MatchQueryBuilder textQuery(String name, Object text) { + return new MatchQueryBuilder(name, text).type(MatchQueryBuilder.Type.BOOLEAN); + } + + /** + * Creates a match query with type "BOOLEAN" for the provided field name and text. + * + * @param name The field name. + * @param text The query text (to be analyzed). + */ + public static MatchQueryBuilder matchQuery(String name, Object text) { + return new MatchQueryBuilder(name, text).type(MatchQueryBuilder.Type.BOOLEAN); } /** @@ -61,7 +72,7 @@ public abstract class QueryBuilders { * @param text The query text (to be analyzed). * @deprecated use {@link #textPhraseQuery(String, Object)} instead */ - public static TextQueryBuilder textPhrase(String name, Object text) { + public static MatchQueryBuilder textPhrase(String name, Object text) { return textPhraseQuery(name, text); } @@ -70,9 +81,20 @@ public abstract class QueryBuilders { * * @param name The field name. * @param text The query text (to be analyzed). + * @deprecated Use {@link #matchPhraseQuery(String, Object)} */ - public static TextQueryBuilder textPhraseQuery(String name, Object text) { - return new TextQueryBuilder(name, text).type(TextQueryBuilder.Type.PHRASE); + public static MatchQueryBuilder textPhraseQuery(String name, Object text) { + return new MatchQueryBuilder(name, text).type(MatchQueryBuilder.Type.PHRASE); + } + + /** + * Creates a text query with type "PHRASE" for the provided field name and text. + * + * @param name The field name. + * @param text The query text (to be analyzed). + */ + public static MatchQueryBuilder matchPhraseQuery(String name, Object text) { + return new MatchQueryBuilder(name, text).type(MatchQueryBuilder.Type.PHRASE); } /** @@ -82,7 +104,7 @@ public abstract class QueryBuilders { * @param text The query text (to be analyzed). * @deprecated use {@link #textPhrasePrefixQuery(String, Object)} instead */ - public static TextQueryBuilder textPhrasePrefix(String name, Object text) { + public static MatchQueryBuilder textPhrasePrefix(String name, Object text) { return textPhrasePrefixQuery(name, text); } @@ -91,9 +113,20 @@ public abstract class QueryBuilders { * * @param name The field name. * @param text The query text (to be analyzed). + * @deprecated Use {@link #matchPhrasePrefixQuery(String, Object)} */ - public static TextQueryBuilder textPhrasePrefixQuery(String name, Object text) { - return new TextQueryBuilder(name, text).type(TextQueryBuilder.Type.PHRASE_PREFIX); + public static MatchQueryBuilder textPhrasePrefixQuery(String name, Object text) { + return new MatchQueryBuilder(name, text).type(MatchQueryBuilder.Type.PHRASE_PREFIX); + } + + /** + * Creates a match query with type "PHRASE_PREFIX" for the provided field name and text. + * + * @param name The field name. + * @param text The query text (to be analyzed). + */ + public static MatchQueryBuilder matchPhrasePrefixQuery(String name, Object text) { + return new MatchQueryBuilder(name, text).type(MatchQueryBuilder.Type.PHRASE_PREFIX); } /** diff --git a/src/main/java/org/elasticsearch/index/search/TextQueryParser.java b/src/main/java/org/elasticsearch/index/search/MatchQuery.java similarity index 99% rename from src/main/java/org/elasticsearch/index/search/TextQueryParser.java rename to src/main/java/org/elasticsearch/index/search/MatchQuery.java index 8f82342496e..d308a64ad6b 100644 --- a/src/main/java/org/elasticsearch/index/search/TextQueryParser.java +++ b/src/main/java/org/elasticsearch/index/search/MatchQuery.java @@ -43,7 +43,7 @@ import java.util.List; import static org.elasticsearch.index.query.support.QueryParsers.wrapSmartNameQuery; -public class TextQueryParser { +public class MatchQuery { public static enum Type { BOOLEAN, @@ -72,7 +72,7 @@ public class TextQueryParser { private MultiTermQuery.RewriteMethod rewriteMethod; private MultiTermQuery.RewriteMethod fuzzyRewriteMethod; - public TextQueryParser(QueryParseContext parseContext, String fieldName, String text) { + public MatchQuery(QueryParseContext parseContext, String fieldName, String text) { this.parseContext = parseContext; this.fieldName = fieldName; this.text = text; diff --git a/src/main/java/org/elasticsearch/indices/query/IndicesQueriesRegistry.java b/src/main/java/org/elasticsearch/indices/query/IndicesQueriesRegistry.java index a7263364a1b..99f8dc68825 100644 --- a/src/main/java/org/elasticsearch/indices/query/IndicesQueriesRegistry.java +++ b/src/main/java/org/elasticsearch/indices/query/IndicesQueriesRegistry.java @@ -40,7 +40,7 @@ public class IndicesQueriesRegistry { @Inject public IndicesQueriesRegistry(Settings settings, @Nullable ClusterService clusterService) { Map queryParsers = Maps.newHashMap(); - addQueryParser(queryParsers, new TextQueryParser()); + addQueryParser(queryParsers, new MatchQueryParser()); addQueryParser(queryParsers, new NestedQueryParser()); addQueryParser(queryParsers, new HasChildQueryParser()); addQueryParser(queryParsers, new TopChildrenQueryParser());