Skip to content

Commit

Permalink
Add missing fields on simple query string query
Browse files Browse the repository at this point in the history
Add `quote_field_suffix` to simple_query_string query
Deprecate `lowercase_expanded_terms` and `locale`: elastic/elasticsearch#20208
Add "all field" execution mode to query_string and simple_query_string query: elastic/elasticsearch#20925

Fixes #2792
  • Loading branch information
russcam committed Jun 29, 2017
1 parent 109bcb0 commit 5546c35
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 13 deletions.
44 changes: 34 additions & 10 deletions src/Nest/QueryDsl/FullText/QueryString/QueryStringQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public interface IQueryStringQuery : IQuery
bool? AllowLeadingWildcard { get; set; }

[JsonProperty("lowercase_expanded_terms")]
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
bool? LowercaseExpendedTerms { get; set; }

[JsonProperty("enable_position_increments")]
Expand Down Expand Up @@ -60,6 +61,7 @@ public interface IQueryStringQuery : IQuery
bool? Lenient { get; set; }

[JsonProperty("locale")]
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
string Locale { get; set; }

[JsonProperty("time_zone")]
Expand Down Expand Up @@ -93,6 +95,12 @@ public interface IQueryStringQuery : IQuery

[JsonProperty("escape")]
bool? Escape { get; set; }

[JsonProperty("all_fields")]
bool? AllFields { get; set; }

[JsonProperty("split_on_whitespace")]
bool? SplitOnWhitespace { get; set; }
}

public class QueryStringQuery : QueryBase, IQueryStringQuery
Expand All @@ -101,20 +109,21 @@ public class QueryStringQuery : QueryBase, IQueryStringQuery
public int? FuzzyMaxExpansions { get; set; }
public Fuzziness Fuzziness { get; set; }
public MinimumShouldMatch MinimumShouldMatch { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public string Locale { get; set; }
[Obsolete("Use MultiTermQueryRewrite")]
public RewriteMultiTerm? Rewrite
{
get { return MultiTermQueryRewrite?.Rewrite; }
set { MultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value); }
get => MultiTermQueryRewrite?.Rewrite;
set => MultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value);
}
public MultiTermQueryRewrite MultiTermQueryRewrite { get; set; }

[Obsolete("Use FuzzyMultiTermQueryRewrite")]
public RewriteMultiTerm? FuzzyRewrite
{
get { return FuzzyMultiTermQueryRewrite?.Rewrite; }
set { FuzzyMultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value); }
get => FuzzyMultiTermQueryRewrite?.Rewrite;
set => FuzzyMultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value);
}
public MultiTermQueryRewrite FuzzyMultiTermQueryRewrite { get; set; }
public string QuoteFieldSuffix { get; set; }
Expand All @@ -127,6 +136,7 @@ public RewriteMultiTerm? FuzzyRewrite
public string Analyzer { get; set; }
public string QuoteAnalyzer { get; set; }
public bool? AllowLeadingWildcard { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public bool? LowercaseExpendedTerms { get; set; }
public bool? EnablePositionIncrements { get; set; }
public int? FuzzyPrefixLength { get; set; }
Expand All @@ -137,6 +147,8 @@ public RewriteMultiTerm? FuzzyRewrite
public bool? UseDisMax { get; set; }
public double? TieBreaker { get; set; }
public int? MaximumDeterminizedStates { get; set; }
public bool? AllFields { get; set; }
public bool? SplitOnWhitespace { get; set; }

internal override void InternalWrapInContainer(IQueryContainer c) => c.QueryString = this;
internal static bool IsConditionless(IQueryStringQuery q) => q.Query.IsNullOrEmpty();
Expand All @@ -150,6 +162,7 @@ public class QueryStringQueryDescriptor<T>
protected override bool Conditionless => QueryStringQuery.IsConditionless(this);

string IQueryStringQuery.Query { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
string IQueryStringQuery.Locale { get; set; }
string IQueryStringQuery.Timezone { get; set; }
Field IQueryStringQuery.DefaultField { get; set; }
Expand All @@ -158,6 +171,7 @@ public class QueryStringQueryDescriptor<T>
string IQueryStringQuery.Analyzer { get; set; }
string IQueryStringQuery.QuoteAnalyzer { get; set; }
bool? IQueryStringQuery.AllowLeadingWildcard { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
bool? IQueryStringQuery.LowercaseExpendedTerms { get; set; }
bool? IQueryStringQuery.EnablePositionIncrements { get; set; }
int? IQueryStringQuery.FuzzyMaxExpansions { get; set; }
Expand All @@ -174,19 +188,21 @@ public class QueryStringQueryDescriptor<T>
[Obsolete("Use FuzzyMultiTermQueryRewrite")]
RewriteMultiTerm? IQueryStringQuery.FuzzyRewrite
{
get { return Self.FuzzyMultiTermQueryRewrite?.Rewrite; }
set { Self.FuzzyMultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value); }
get => Self.FuzzyMultiTermQueryRewrite?.Rewrite;
set => Self.FuzzyMultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value);
}
MultiTermQueryRewrite IQueryStringQuery.FuzzyMultiTermQueryRewrite { get; set; }
[Obsolete("Use MultiTermQueryRewrite")]
RewriteMultiTerm? IQueryStringQuery.Rewrite
{
get { return Self.MultiTermQueryRewrite?.Rewrite; }
set { Self.MultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value); }
get => Self.MultiTermQueryRewrite?.Rewrite;
set => Self.MultiTermQueryRewrite = value == null ? null : new MultiTermQueryRewrite(value.Value);
}
MultiTermQueryRewrite IQueryStringQuery.MultiTermQueryRewrite { get; set; }
string IQueryStringQuery.QuoteFieldSuffix { get; set; }
bool? IQueryStringQuery.Escape { get; set; }
bool? IQueryStringQuery.AllFields { get; set; }
bool? IQueryStringQuery.SplitOnWhitespace { get; set; }

public QueryStringQueryDescriptor<T> DefaultField(Field field) => Assign(a => a.DefaultField = field);
public QueryStringQueryDescriptor<T> DefaultField(Expression<Func<T, object>> field) => Assign(a => a.DefaultField = field);
Expand All @@ -198,6 +214,7 @@ public QueryStringQueryDescriptor<T> Fields(Func<FieldsDescriptor<T>, IPromise<F

public QueryStringQueryDescriptor<T> Query(string query) => Assign(a => a.Query = query);

[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public QueryStringQueryDescriptor<T> Locale(string locale) => Assign(a => a.Locale = locale);

public QueryStringQueryDescriptor<T> Timezone(string timezone) => Assign(a => a.Timezone = timezone);
Expand All @@ -211,6 +228,7 @@ public QueryStringQueryDescriptor<T> Fields(Func<FieldsDescriptor<T>, IPromise<F
public QueryStringQueryDescriptor<T> AllowLeadingWildcard(bool? allowLeadingWildcard = true) =>
Assign(a => a.AllowLeadingWildcard = allowLeadingWildcard);

[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public QueryStringQueryDescriptor<T> LowercaseExpendedTerms(bool? lowercaseExpendedTerms = true) =>
Assign(a => a.LowercaseExpendedTerms = lowercaseExpendedTerms);

Expand Down Expand Up @@ -260,11 +278,17 @@ public QueryStringQueryDescriptor<T> Rewrite(RewriteMultiTerm? rewrite) =>
: null;
});

public QueryStringQueryDescriptor<T> Rewrite(MultiTermQueryRewrite rewrite) => Assign(a => Self.MultiTermQueryRewrite = rewrite);
public QueryStringQueryDescriptor<T> Rewrite(MultiTermQueryRewrite rewrite) =>
Assign(a => Self.MultiTermQueryRewrite = rewrite);

public QueryStringQueryDescriptor<T> QuoteFieldSuffix(string quoteFieldSuffix) => Assign(a => a.QuoteFieldSuffix = quoteFieldSuffix);
public QueryStringQueryDescriptor<T> QuoteFieldSuffix(string quoteFieldSuffix) =>
Assign(a => a.QuoteFieldSuffix = quoteFieldSuffix);

public QueryStringQueryDescriptor<T> Escape(bool? escape = true) => Assign(a => a.Escape = escape);

public QueryStringQueryDescriptor<T> AllFields(bool? allFields = true) => Assign(a => a.AllFields = allFields);

public QueryStringQueryDescriptor<T> SplitOnWhitespace(bool? splitOnWhitespace = true) =>
Assign(a => a.SplitOnWhitespace = splitOnWhitespace);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ public interface ISimpleQueryStringQuery : IQuery
SimpleQueryStringFlags? Flags { get; set; }

[JsonProperty(PropertyName = "locale")]
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
string Locale { get; set; }

[JsonProperty(PropertyName = "lowercase_expanded_terms")]
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
bool? LowercaseExpendedTerms { get; set; }

[JsonProperty(PropertyName = "lenient")]
Expand All @@ -36,6 +38,12 @@ public interface ISimpleQueryStringQuery : IQuery

[JsonProperty("minimum_should_match")]
MinimumShouldMatch MinimumShouldMatch { get; set; }

[JsonProperty("quote_field_suffix")]
string QuoteFieldSuffix { get; set; }

[JsonProperty("all_fields")]
bool? AllFields { get; set; }
}

public class SimpleQueryStringQuery : QueryBase, ISimpleQueryStringQuery
Expand All @@ -46,11 +54,15 @@ public class SimpleQueryStringQuery : QueryBase, ISimpleQueryStringQuery
public string Analyzer { get; set; }
public Operator? DefaultOperator { get; set; }
public SimpleQueryStringFlags? Flags { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public string Locale { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public bool? LowercaseExpendedTerms { get; set; }
public bool? Lenient { get; set; }
public bool? AnalyzeWildcard { get; set; }
public MinimumShouldMatch MinimumShouldMatch { get; set; }
public string QuoteFieldSuffix { get; set; }
public bool? AllFields { get; set; }

internal override void InternalWrapInContainer(IQueryContainer c) => c.SimpleQueryString = this;
internal static bool IsConditionless(ISimpleQueryStringQuery q) => q.Query.IsNullOrEmpty();
Expand All @@ -66,11 +78,15 @@ public class SimpleQueryStringQueryDescriptor<T>
string ISimpleQueryStringQuery.Analyzer { get; set; }
Operator? ISimpleQueryStringQuery.DefaultOperator { get; set; }
SimpleQueryStringFlags? ISimpleQueryStringQuery.Flags { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
string ISimpleQueryStringQuery.Locale { get; set; }
[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
bool? ISimpleQueryStringQuery.LowercaseExpendedTerms { get; set; }
bool? ISimpleQueryStringQuery.AnalyzeWildcard { get; set; }
bool? ISimpleQueryStringQuery.Lenient { get; set; }
MinimumShouldMatch ISimpleQueryStringQuery.MinimumShouldMatch { get; set; }
string ISimpleQueryStringQuery.QuoteFieldSuffix { get; set; }
bool? ISimpleQueryStringQuery.AllFields { get; set; }

public SimpleQueryStringQueryDescriptor<T> Fields(Func<FieldsDescriptor<T>, IPromise<Fields>> fields) =>
Assign(a => a.Fields = fields?.Invoke(new FieldsDescriptor<T>())?.Value);
Expand All @@ -85,8 +101,10 @@ public SimpleQueryStringQueryDescriptor<T> Fields(Func<FieldsDescriptor<T>, IPro

public SimpleQueryStringQueryDescriptor<T> Flags(SimpleQueryStringFlags? flags) => Assign(a => a.Flags = flags);

[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public SimpleQueryStringQueryDescriptor<T> Locale(string locale) => Assign(a => a.Locale = locale);

[Obsolete("Deprecated in Elasticsearch 5.1.1. Can be performed by the analyzer applied")]
public SimpleQueryStringQueryDescriptor<T> LowercaseExpendedTerms(bool? lowercaseExpendedTerms = true) =>
Assign(a => a.LowercaseExpendedTerms = lowercaseExpendedTerms);

Expand All @@ -98,5 +116,10 @@ public SimpleQueryStringQueryDescriptor<T> AnalyzeWildcard(bool? analyzeWildcard
public SimpleQueryStringQueryDescriptor<T> MinimumShouldMatch(MinimumShouldMatch minimumShouldMatch) =>
Assign(a => a.MinimumShouldMatch = minimumShouldMatch);

}
public SimpleQueryStringQueryDescriptor<T> QuoteFieldSuffix(string quoteFieldSuffix) =>
Assign(a => a.QuoteFieldSuffix = quoteFieldSuffix);

public SimpleQueryStringQueryDescriptor<T> AllFields(bool? allFields = true) =>
Assign(a => a.AllFields = allFields);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ public QueryStringUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, u
AllowLeadingWildcard = true,
AutoGeneratePhraseQueries = true,
MaximumDeterminizedStates = 2,
#pragma warning disable 618 // usage of lowercase_expanded_terms and locale
LowercaseExpendedTerms = true,
Locale = "en_US",
#pragma warning restore 618 // usage of lowercase_expanded_terms and locale
EnablePositionIncrements = true,
Escape = true,
UseDisMax = true,
Expand All @@ -70,12 +73,12 @@ public QueryStringUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, u
AnalyzeWildcard = true,
MinimumShouldMatch = 2,
QuoteFieldSuffix = "'",
Lenient = true,
Locale = "en_US",
Lenient = true,
Timezone = "root"
};

protected override QueryContainer QueryFluent(QueryContainerDescriptor<Project> q) => q
#pragma warning disable 618 // usage of lowercase_expanded_terms and locale
.QueryString(c => c
.Name("named_query")
.Boost(1.1)
Expand Down Expand Up @@ -105,6 +108,7 @@ protected override QueryContainer QueryFluent(QueryContainerDescriptor<Project>
.Locale("en_US")
.Timezone("root")
);
#pragma warning restore 618 // usage of lowercase_expanded_terms and locale

protected override ConditionlessWhen ConditionlessWhen => new ConditionlessWhen<IQueryStringQuery>(a => a.QueryString)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Tests.Framework.MockData;
using static Nest.Infer;


namespace Tests.QueryDsl.FullText.SimpleQueryString
{
public class SimpleQueryStringUsageTests : QueryDslUsageTestsBase
Expand Down Expand Up @@ -38,14 +39,17 @@ public SimpleQueryStringUsageTests(ReadOnlyCluster i, EndpointUsage usage) : bas
Analyzer = "standard",
DefaultOperator = Operator.Or,
Flags = SimpleQueryStringFlags.And|SimpleQueryStringFlags.Near,
#pragma warning disable 618 // usage of lowercase_expanded_terms and locale
Locale = "en_US",
LowercaseExpendedTerms = true,
#pragma warning restore 618
Lenient = true,
AnalyzeWildcard = true,
MinimumShouldMatch = "30%"
};

protected override QueryContainer QueryFluent(QueryContainerDescriptor<Project> q) => q
#pragma warning disable 618 // usage of lowercase_expanded_terms and locale
.SimpleQueryString(c => c
.Name("named_query")
.Boost(1.1)
Expand All @@ -60,6 +64,7 @@ protected override QueryContainer QueryFluent(QueryContainerDescriptor<Project>
.AnalyzeWildcard()
.MinimumShouldMatch("30%")
);
#pragma warning restore 618

protected override ConditionlessWhen ConditionlessWhen => new ConditionlessWhen<ISimpleQueryStringQuery>(a => a.SimpleQueryString)
{
Expand Down

0 comments on commit 5546c35

Please sign in to comment.