Rename text query to match query (text query still works, with variants), closes #2150
This commit is contained in:
parent
3925c0b4e1
commit
055f0809c2
|
@ -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<TextQueryBuilder> {
|
||||
public class MatchQueryBuilder extends BaseQueryBuilder implements BoostableQueryBuilder<MatchQueryBuilder> {
|
||||
|
||||
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 <tt>OR</tt>.
|
||||
*/
|
||||
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);
|
|
@ -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);
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
|
@ -40,7 +40,7 @@ public class IndicesQueriesRegistry {
|
|||
@Inject
|
||||
public IndicesQueriesRegistry(Settings settings, @Nullable ClusterService clusterService) {
|
||||
Map<String, QueryParser> queryParsers = Maps.newHashMap();
|
||||
addQueryParser(queryParsers, new TextQueryParser());
|
||||
addQueryParser(queryParsers, new MatchQueryParser());
|
||||
addQueryParser(queryParsers, new NestedQueryParser());
|
||||
addQueryParser(queryParsers, new HasChildQueryParser());
|
||||
addQueryParser(queryParsers, new TopChildrenQueryParser());
|
||||
|
|
Loading…
Reference in New Issue