NOTE: You are looking at documentation for an older release. For the latest information, see the current release documentation.
Suggest Usage
edit
IMPORTANT: This documentation is no longer updated. Refer to Elastic's version policy and the latest documentation.
Suggest Usage
editThe suggest feature suggests similar looking terms based on a provided text by using a suggester.
See the Elasticsearch documentation on Suggesters for more detail.
Fluent DSL example
edits => s
.Query(q => ProjectFilter)
.DocValueFields(d => d
.Field(f => f.State)
)
.Suggest(ss => ss
.Term("my-term-suggest", t => t
.MaxEdits(1)
.MaxInspections(2)
.MaxTermFrequency(3)
.MinDocFrequency(4)
.MinWordLength(5)
.PrefixLength(6)
.SuggestMode(SuggestMode.Always)
.Analyzer("standard")
.Field(p => p.Name)
.ShardSize(7)
.Size(8)
.Text("hello world")
)
.Completion("my-completion-suggest", c => c
.Contexts(ctxs => ctxs
.Context("color",
ctx => ctx.Context(Project.First.Suggest.Contexts.Values.SelectMany(v => v).First())
)
)
.Fuzzy(f => f
.Fuzziness(Fuzziness.Auto)
.MinLength(1)
.PrefixLength(2)
.Transpositions()
.UnicodeAware(false)
)
.Analyzer("simple")
.Field(p => p.Suggest)
.Size(8)
.Prefix(Project.Instance.Name)
)
.Phrase("my-phrase-suggest", ph => ph
.Collate(c => c
.Query(q => q
.Source("{ \"match\": { \"{{field_name}}\": \"{{suggestion}}\" }}")
)
.Params(p => p.Add("field_name", "title"))
.Prune()
)
.Confidence(10.1)
.DirectGenerator(d => d
.Field(p => p.Description)
)
.GramSize(1)
.Field(p => p.Name)
.Text("hello world")
.RealWordErrorLikelihood(0.5)
.TokenLimit(5)
.ForceUnigrams(false)
)
)
Object Initializer syntax example
editnew SearchRequest<Project>
{
Query = ProjectFilter,
DocValueFields = Fields<Project>(f => f.State),
Suggest = new SuggestContainer
{
{
"my-term-suggest", new SuggestBucket
{
Text = "hello world",
Term = new TermSuggester
{
MaxEdits = 1,
MaxInspections = 2,
MaxTermFrequency = 3,
MinDocFrequency = 4,
MinWordLength = 5,
PrefixLength = 6,
SuggestMode = SuggestMode.Always,
Analyzer = "standard",
Field = Field<Project>(p => p.Name),
ShardSize = 7,
Size = 8
}
}
},
{
"my-completion-suggest", new SuggestBucket
{
Prefix = Project.Instance.Name,
Completion = new CompletionSuggester
{
Contexts = new Dictionary<string, IList<ISuggestContextQuery>>
{
{
"color",
new List<ISuggestContextQuery>
{ new SuggestContextQuery { Context = Project.First.Suggest.Contexts.Values.SelectMany(v => v).First() } }
}
},
Fuzzy = new FuzzySuggester
{
Fuzziness = Fuzziness.Auto,
MinLength = 1,
PrefixLength = 2,
Transpositions = true,
UnicodeAware = false
},
Analyzer = "simple",
Field = Field<Project>(p => p.Suggest),
Size = 8
}
}
},
{
"my-phrase-suggest", new SuggestBucket
{
Text = "hello world",
Phrase = new PhraseSuggester
{
Collate = new PhraseSuggestCollate
{
Query = new PhraseSuggestCollateQuery
{
Source = "{ \"match\": { \"{{field_name}}\": \"{{suggestion}}\" }}",
},
Params = new Dictionary<string, object>
{
{ "field_name", "title" }
},
Prune = true
},
Confidence = 10.1,
DirectGenerator = new List<DirectGenerator>
{
new DirectGenerator { Field = "description" }
},
GramSize = 1,
Field = "name",
RealWordErrorLikelihood = 0.5,
TokenLimit = 5,
ForceUnigrams = false
}
}
},
}
}
Example json output.
{
"query": {
"term": {
"type": {
"value": "project"
}
}
},
"docvalue_fields": [
"state"
],
"suggest": {
"my-completion-suggest": {
"completion": {
"analyzer": "simple",
"contexts": {
"color": [
{
"context": "red"
}
]
},
"field": "suggest",
"fuzzy": {
"fuzziness": "AUTO",
"min_length": 1,
"prefix_length": 2,
"transpositions": true,
"unicode_aware": false
},
"size": 8
},
"prefix": "Durgan LLC"
},
"my-phrase-suggest": {
"phrase": {
"collate": {
"query": {
"source": "{ \"match\": { \"{{field_name}}\": \"{{suggestion}}\" }}"
},
"params": {
"field_name": "title"
},
"prune": true
},
"confidence": 10.1,
"direct_generator": [
{
"field": "description"
}
],
"field": "name",
"gram_size": 1,
"real_word_error_likelihood": 0.5,
"token_limit": 5,
"force_unigrams": false
},
"text": "hello world"
},
"my-term-suggest": {
"term": {
"analyzer": "standard",
"field": "name",
"max_edits": 1,
"max_inspections": 2,
"max_term_freq": 3.0,
"min_doc_freq": 4.0,
"min_word_length": 5,
"prefix_length": 6,
"shard_size": 7,
"size": 8,
"suggest_mode": "always"
},
"text": "hello world"
}
}
}
Handling Responses
editvar myCompletionSuggest = response.Suggest["my-completion-suggest"];
myCompletionSuggest.Should().NotBeNull();
var suggest = myCompletionSuggest.First();
suggest.Text.Should().Be(Project.Instance.Name);
suggest.Length.Should().BeGreaterThan(0);
var option = suggest.Options.First();
option.Text.Should().NotBeNullOrEmpty();
option.Index.Should().Be("project");
option.Type.Should().Be("doc");
option.Id.Should().NotBeNull();
option.Source.Should().NotBeNull();
option.Source.Name.Should().NotBeNullOrWhiteSpace();
option.Source.ShouldAdhereToSourceSerializerWhenSet();
option.Score.Should().BeGreaterThan(0);
option.Fields.Should().NotBeNull().And.NotBeEmpty();
option.Fields.Should().ContainKey("state");
option.Contexts.Should().NotBeNull().And.NotBeEmpty();
option.Contexts.Should().ContainKey("color");
var colorContexts = option.Contexts["color"];
colorContexts.Should().NotBeNull().And.HaveCount(1);
colorContexts.First().Category.Should().Be(Project.First.Suggest.Contexts.Values.SelectMany(v => v).First());