From d6ceeb238e78c8020368ec2307f7c02fc4b67592 Mon Sep 17 00:00:00 2001
From: Mantas <marc.mantas@gmail.com>
Date: Tue, 12 Jul 2016 14:25:17 +0300
Subject: [PATCH] updated the documentation

---
 docs/Suggest/index.md | 162 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 154 insertions(+), 8 deletions(-)

diff --git a/docs/Suggest/index.md b/docs/Suggest/index.md
index 273c784..d496d97 100644
--- a/docs/Suggest/index.md
+++ b/docs/Suggest/index.md
@@ -1,12 +1,27 @@
 # Suggest
 
-Objective suggest builder represents [Elasticsearch Term suggest][1].
+Objective suggest builder in ONGR ElasticsearchDSL represents [Elasticsearch suggesters][1].
+The `Suggest` class is universal for all the suggesters that are currently implemented in
+Elasticsearch.
 
-To form a suggest you have to create `Search` object. See below an example of suggest usage.
+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:
+
+### Simple example
 
 ```php
 $search = new Search();
-$suggest = new Suggest('my_suggest', 'searchText', ['field' => 'title', 'size' => 5]);
+$suggest = new Suggest('my_suggest', 'term', 'searchText', 'title', ['size' => 5]);
 $search->addSuggest($suggest);
 $queryArray = $search->toArray();
 ```
@@ -25,13 +40,15 @@ That will generate following JSON:
 }
 ```
 
+### Example of multiple suggests
+
 You're able to create more than one suggest:
 
 ```php
 $search = new Search();
-$suggest1 = new Suggest('my_suggest1', 'the amsterdma meetpu', ['field' => 'body', 'size' => 5]);
+$suggest1 = new Suggest('my_suggest1', 'term', 'the amsterdma meetpu', 'body', ['size' => 5]);
 $search->addSuggest($suggest1);
-$suggest2 = new Suggest('my_suggest2', 'the rottredam meetpu', ['field' => 'title', 'size' => 5]);
+$suggest2 = new Suggest('my_suggest2', 'term', 'the rottredam meetpu', 'title', ['size' => 5]);
 $search->addSuggest($suggest2);
 $queryArray = $search->toArray();
 ```
@@ -57,8 +74,137 @@ That will generate following JSON:
 }
 ```
 
-If parameters `field` or `size` are not provided they will have default values, `field = _all` and `size = 3`
+### Example of phrase suggest
+
+Also, provide different types of suggests, for example, this is a phrase suggest:
+
+```php
+$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:
+
+```yaml
+"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>"
+      }
+    }
+  }
+}
+
+```
+
+### Example of completion suggest:
+
+```php
+
+$search = new Search();
+$suggest = new Suggest('song-suggest', 'completion', 'n', 'suggest');
+
+$search->addSuggest($suggest);
+$queryArray = $search->toArray();
+
+```
+
+That will generate following JSON:
+
+```yaml
+
+"suggest" : {
+  "song-suggest" : {
+    "text" : "n",
+    "completion" : {
+      "field" : "suggest"
+    }
+  }
+}
+
+```
+
+### Example of context suggest:
+
+```php
+
+$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:
+
+```yaml
+
+"suggest" : {
+  "context-suggestion" : {
+    "text" : "m",
+    "completion" : {
+      "field" : "suggest_field",
+      "size": 10,
+      "context": {
+        "color": "red"
+      }
+    }
+  }
+}
+
+```
 
-Find available parameters in [Elasticsearch Term suggest documentation][1]
+Find out more about suggesters in the official [Elasticsearch suggest documentation][1]
 
-[1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-term.html
\ No newline at end of file
+[1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html
\ No newline at end of file
-- 
GitLab