Objective suggest builder in ONGR ElasticsearchDSL represents Elasticsearch suggesters.
The Suggest
class is universal for all the suggesters that are currently implemented in
Elasticsearch.
The Suggest
object takes up to 5 parameters during the initiation:
Parameter | Description |
---|---|
name |
The name of the Suggest |
field |
The ES field to execute the suggest |
type |
The type of the suggest (eg. phrase) |
text |
The text that will be passed to suggest |
parameters |
Array of additional parameters that may be unique to every type of suggest |
To form a suggest you have to create Search
object. See examples below for more information
on suggest usage:
$search = new Search();
$suggest = new Suggest('my_suggest', 'term', 'searchText', 'title', ['size' => 5]);
$search->addSuggest($suggest);
$queryArray = $search->toArray();
That will generate following JSON:
"suggest": {
"my_suggest": {
"text": "searchText",
"term": {
"field": "title",
"size": 5
}
}
}
You're able to create more than one suggest:
$search = new Search();
$suggest1 = new Suggest('my_suggest1', 'term', 'the amsterdma meetpu', 'body', ['size' => 5]);
$search->addSuggest($suggest1);
$suggest2 = new Suggest('my_suggest2', 'term', 'the rottredam meetpu', 'title', ['size' => 5]);
$search->addSuggest($suggest2);
$queryArray = $search->toArray();
That will generate following JSON:
"suggest": {
"my_suggest1": {
"text": "the amsterdma meetpu",
"term": {
"field": "body",
"size": 5
}
},
"my_suggest2": {
"text": "the rottredam meetpu",
"term": {
"field": "title",
"size": 5
}
}
}
Also, provide different types of suggests, for example, this is a phrase suggest:
$search = new Search();
$suggest = new Suggest(
'my-suggest',
'phrase',
'Xor the Got-Jewel',
'bigram',
[
'analyzer' => 'body',
'size' => 1,
'real_word_error_likelihood' => 0.95,
'max_errors' => 0.5,
'gram_size' => 2,
'direct_generator' => [
[
'field' => 'body',
'suggest_mode' => 'always',
'min_word_length' => 1
]
],
'highlight'=> [
'pre_tag' => '<em>',
'post_tag' => '</em>'
]
]
);
$search->addSuggest($suggest);
$queryArray = $search->toArray();
That will generate following JSON:
"suggest" : {
"my-suggest"
"text" : "Xor the Got-Jewel",
"phrase" : {
"analyzer" : "body",
"field" : "bigram",
"size" : 1,
"real_word_error_likelihood" : 0.95,
"max_errors" : 0.5,
"gram_size" : 2,
"direct_generator" : [ {
"field" : "body",
"suggest_mode" : "always",
"min_word_length" : 1
} ],
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
}
}
}
}
$search = new Search();
$suggest = new Suggest('song-suggest', 'completion', 'n', 'suggest');
$search->addSuggest($suggest);
$queryArray = $search->toArray();
That will generate following JSON:
"suggest" : {
"song-suggest" : {
"text" : "n",
"completion" : {
"field" : "suggest"
}
}
}
$search = new Search();
$suggest = new Suggest(
'context-suggestion',
'completion',
'm',
'suggest_field',
[
'context' => ['color' => 'red'],
'size' => 10
]
);
$search->addSuggest($suggest);
$queryArray = $search->toArray();
That will generate following JSON:
"suggest" : {
"context-suggestion" : {
"text" : "m",
"completion" : {
"field" : "suggest_field",
"size": 10,
"context": {
"color": "red"
}
}
}
}
Find out more about suggesters in the official Elasticsearch suggest documentation